use __regid__ instead of id on appobject classes
authorSylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 23 Sep 2009 09:29:39 +0200
changeset 3377 dd9d292b6a6d
parent 3376 f5c69485381f
child 3378 2f25f701301d
use __regid__ instead of id on appobject classes
entities/__init__.py
entities/authobjs.py
entities/lib.py
entities/schemaobjs.py
entities/wfobjs.py
sobjects/notification.py
sobjects/supervising.py
web/views/actions.py
web/views/ajaxedit.py
web/views/basecomponents.py
web/views/basecontrollers.py
web/views/basetemplates.py
web/views/baseviews.py
web/views/boxes.py
web/views/calendar.py
web/views/csvexport.py
web/views/cwproperties.py
web/views/cwuser.py
web/views/debug.py
web/views/editcontroller.py
web/views/editforms.py
web/views/editviews.py
web/views/emailaddress.py
web/views/embedding.py
web/views/error.py
web/views/facets.py
web/views/formrenderers.py
web/views/forms.py
web/views/ibreadcrumbs.py
web/views/idownloadable.py
web/views/igeocodable.py
web/views/iprogress.py
web/views/isioc.py
web/views/magicsearch.py
web/views/management.py
web/views/massmailing.py
web/views/navigation.py
web/views/old_calendar.py
web/views/owl.py
web/views/primary.py
web/views/pyviews.py
web/views/schema.py
web/views/sparql.py
web/views/startup.py
web/views/tableview.py
web/views/timeline.py
web/views/timetable.py
web/views/treeview.py
web/views/urlpublishing.py
web/views/urlrewrite.py
web/views/wdoc.py
web/views/workflow.py
web/views/xbel.py
web/views/xmlrss.py
--- a/entities/__init__.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/entities/__init__.py	Wed Sep 23 09:29:39 2009 +0200
@@ -22,7 +22,7 @@
     """an entity instance has e_schema automagically set on the class and
     instances have access to their issuing cursor
     """
-    id = 'Any'
+    __regid__ = 'Any'
     __implements__ = (IBreadCrumbs, IFeed)
 
     fetch_attrs = ('modification_date',)
--- a/entities/authobjs.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/entities/authobjs.py	Wed Sep 23 09:29:39 2009 +0200
@@ -13,7 +13,7 @@
 from cubicweb.entities import AnyEntity, fetch_config
 
 class CWGroup(AnyEntity):
-    id = 'CWGroup'
+    __regid__ = 'CWGroup'
     fetch_attrs, fetch_order = fetch_config(['name'])
     fetch_unrelated_order = fetch_order
 
@@ -22,7 +22,7 @@
         return self.get('name')
 
 class CWUser(AnyEntity):
-    id = 'CWUser'
+    __regid__ = 'CWUser'
     fetch_attrs, fetch_order = fetch_config(['login', 'firstname', 'surname'])
     fetch_unrelated_order = fetch_order
 
--- a/entities/lib.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/entities/lib.py	Wed Sep 23 09:29:39 2009 +0200
@@ -24,7 +24,7 @@
     return '%s at %s' % (name, host.replace('.', ' dot '))
 
 class EmailAddress(AnyEntity):
-    id = 'EmailAddress'
+    __regid__ = 'EmailAddress'
     fetch_attrs, fetch_order = fetch_config(['address', 'alias'])
 
     def dc_title(self):
@@ -84,7 +84,7 @@
 
 class Bookmark(AnyEntity):
     """customized class for Bookmark entities"""
-    id = 'Bookmark'
+    __regid__ = 'Bookmark'
     fetch_attrs, fetch_order = fetch_config(['title', 'path'])
 
     def actual_url(self):
@@ -103,7 +103,7 @@
 
 
 class CWProperty(AnyEntity):
-    id = 'CWProperty'
+    __regid__ = 'CWProperty'
 
     fetch_attrs, fetch_order = fetch_config(['pkey', 'value'])
     rest_attr = 'pkey'
@@ -126,7 +126,7 @@
 
 class CWCache(AnyEntity):
     """Cache"""
-    id = 'CWCache'
+    __regid__ = 'CWCache'
     fetch_attrs, fetch_order = fetch_config(['name'])
 
     def touch(self):
--- a/entities/schemaobjs.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/entities/schemaobjs.py	Wed Sep 23 09:29:39 2009 +0200
@@ -16,7 +16,7 @@
 
 
 class CWEType(AnyEntity):
-    id = 'CWEType'
+    __regid__ = 'CWEType'
     fetch_attrs, fetch_order = fetch_config(['name'])
 
     def dc_title(self):
@@ -37,7 +37,7 @@
 
 
 class CWRType(AnyEntity):
-    id = 'CWRType'
+    __regid__ = 'CWRType'
     fetch_attrs, fetch_order = fetch_config(['name'])
 
     def dc_title(self):
@@ -87,7 +87,7 @@
 
 
 class CWRelation(AnyEntity):
-    id = 'CWRelation'
+    __regid__ = 'CWRelation'
     fetch_attrs = fetch_config(['cardinality'])[0]
 
     def dc_title(self):
@@ -130,7 +130,7 @@
 
 
 class CWAttribute(CWRelation):
-    id = 'CWAttribute'
+    __regid__ = 'CWAttribute'
 
     def dc_long_title(self):
         card = self.cardinality
@@ -144,7 +144,7 @@
 
 
 class CWConstraint(AnyEntity):
-    id = 'CWConstraint'
+    __regid__ = 'CWConstraint'
     fetch_attrs, fetch_order = fetch_config(['value'])
 
     def dc_title(self):
@@ -164,7 +164,7 @@
 
 
 class RQLExpression(AnyEntity):
-    id = 'RQLExpression'
+    __regid__ = 'RQLExpression'
     fetch_attrs, fetch_order = fetch_config(['exprtype', 'mainvars', 'expression'])
 
     def dc_title(self):
@@ -198,7 +198,7 @@
 
 
 class CWPermission(AnyEntity):
-    id = 'CWPermission'
+    __regid__ = 'CWPermission'
     fetch_attrs, fetch_order = fetch_config(['name', 'label'])
 
     def dc_title(self):
--- a/entities/wfobjs.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/entities/wfobjs.py	Wed Sep 23 09:29:39 2009 +0200
@@ -19,7 +19,7 @@
 class WorkflowException(Exception): pass
 
 class Workflow(AnyEntity):
-    id = 'Workflow'
+    __regid__ = 'Workflow'
 
     @property
     def initial(self):
@@ -156,11 +156,11 @@
     provides a specific may_be_fired method to check if the relation may be
     fired by the logged user
     """
-    id = 'BaseTransition'
+    __regid__ = 'BaseTransition'
     fetch_attrs, fetch_order = fetch_config(['name'])
 
     def __init__(self, *args, **kwargs):
-        if self.id == 'BaseTransition':
+        if self.__regid__ == 'BaseTransition':
             raise WorkflowException('should not be instantiated')
         super(BaseTransition, self).__init__(*args, **kwargs)
 
@@ -233,7 +233,7 @@
 
 class Transition(BaseTransition):
     """customized class for Transition entities"""
-    id = 'Transition'
+    __regid__ = 'Transition'
 
     def destination(self):
         return self.destination_state[0]
@@ -241,7 +241,7 @@
 
 class WorkflowTransition(BaseTransition):
     """customized class for WorkflowTransition entities"""
-    id = 'WorkflowTransition'
+    __regid__ = 'WorkflowTransition'
 
     @property
     def subwf(self):
@@ -284,7 +284,7 @@
 
 class SubWorkflowExitPoint(AnyEntity):
     """customized class for SubWorkflowExitPoint entities"""
-    id = 'SubWorkflowExitPoint'
+    __regid__ = 'SubWorkflowExitPoint'
 
     @property
     def subwf_state(self):
@@ -297,7 +297,7 @@
 
 class State(AnyEntity):
     """customized class for State entities"""
-    id = 'State'
+    __regid__ = 'State'
     fetch_attrs, fetch_order = fetch_config(['name'])
     rest_attr = 'eid'
 
@@ -318,7 +318,7 @@
 class TrInfo(AnyEntity):
     """customized class for Transition information entities
     """
-    id = 'TrInfo'
+    __regid__ = 'TrInfo'
     fetch_attrs, fetch_order = fetch_config(['creation_date', 'comment'],
                                             pclass=None) # don't want modification_date
     @property
--- a/sobjects/notification.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/sobjects/notification.py	Wed Sep 23 09:29:39 2009 +0200
@@ -26,7 +26,7 @@
     by default user's with their email set are notified if any, else the default
     email addresses specified in the configuration are used
     """
-    id = 'recipients_finder'
+    __regid__ = 'recipients_finder'
     __select__ = yes()
     user_rql = ('Any X,E,A WHERE X is CWUser, X in_state S, S name "activated",'
                 'X primary_email E, E address A')
@@ -59,7 +59,7 @@
 
 
 class StatusChangeMixIn(object):
-    id = 'notif_status_change'
+    __regid__ = 'notif_status_change'
     msgid_timestamp = True
     message = _('status changed')
     content = _("""
@@ -89,7 +89,7 @@
       override call)
     """
     __abstract__ = True
-    id = 'notif_after_add_entity'
+    __regid__ = 'notif_after_add_entity'
     msgid_timestamp = False
     message = _('new')
     content = """
--- a/sobjects/supervising.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/sobjects/supervising.py	Wed Sep 23 09:29:39 2009 +0200
@@ -82,8 +82,8 @@
 class SupervisionEmailView(Component):
     """view implementing the email API for data changes supervision notification
     """
+    __regid__ = 'supervision_notif'
     __select__ = none_rset()
-    id = 'supervision_notif'
 
     def recipients(self):
         return self.config['supervising-addrs']
--- a/web/views/actions.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/actions.py	Wed Sep 23 09:29:39 2009 +0200
@@ -74,7 +74,7 @@
     any size entity result search it the current state is 'linksearch'
     if accept match.
     """
-    id = 'select'
+    __regid__ = 'select'
     __select__ = match_search_state('linksearch') & nonempty_rset() & match_searched_etype()
 
     title = _('select')
@@ -86,7 +86,7 @@
 
 
 class CancelSelectAction(Action):
-    id = 'cancel'
+    __regid__ = 'cancel'
     __select__ = match_search_state('linksearch')
 
     title = _('cancel select')
@@ -100,7 +100,7 @@
 
 
 class ViewAction(Action):
-    id = 'view'
+    __regid__ = 'view'
     __select__ = (match_search_state('normal') &
                   match_user_groups('users', 'managers') &
                   view_is_not_default_view() &
@@ -119,7 +119,7 @@
 
 
 class ModifyAction(Action):
-    id = 'edit'
+    __regid__ = 'edit'
     __select__ = (match_search_state('normal') &
                   one_line_rset() &
                   (has_permission('update') | has_editable_relation('add')))
@@ -134,7 +134,7 @@
 
 
 class MultipleEditAction(Action):
-    id = 'muledit' # XXX get strange conflicts if id='edit'
+    __regid__ = 'muledit' # XXX get strange conflicts if id='edit'
     __select__ = (match_search_state('normal') &
                   two_lines_rset() & one_etype_rset() &
                   has_permission('update'))
@@ -150,7 +150,7 @@
 # generic "more" actions #######################################################
 
 class ManagePermissionsAction(Action):
-    id = 'managepermission'
+    __regid__ = 'managepermission'
     __select__ = one_line_rset() & non_final_entity() & match_user_groups('managers')
 
     title = _('manage permissions')
@@ -171,7 +171,7 @@
 
 
 class DeleteAction(Action):
-    id = 'delete'
+    __regid__ = 'delete'
     __select__ = has_permission('delete')
 
     title = _('delete')
@@ -186,7 +186,7 @@
 
 
 class CopyAction(Action):
-    id = 'copy'
+    __regid__ = 'copy'
     __select__ = one_line_rset() & has_permission('add')
 
     title = _('copy')
@@ -202,7 +202,7 @@
     """when we're seeing more than one entity with the same type, propose to
     add a new one
     """
-    id = 'addentity'
+    __regid__ = 'addentity'
     __select__ = (match_search_state('normal') &
                   (addable_etype_empty_rset()
                    | (two_lines_rset() & one_etype_rset & has_add_permission()))
@@ -227,7 +227,7 @@
 
 class AddRelatedActions(Action):
     """fill 'addrelated' sub-menu of the actions box"""
-    id = 'addrelated'
+    __regid__ = 'addrelated'
     __select__ = Action.__select__ & one_line_rset() & non_final_entity()
 
     submenu = _('addrelated')
@@ -293,7 +293,7 @@
 # logged user actions #########################################################
 
 class UserPreferencesAction(Action):
-    id = 'myprefs'
+    __regid__ = 'myprefs'
     __select__ = authenticated_user()
 
     title = _('user preferences')
@@ -305,7 +305,7 @@
 
 
 class UserInfoAction(Action):
-    id = 'myinfos'
+    __regid__ = 'myinfos'
     __select__ = authenticated_user()
 
     title = _('personnal informations')
@@ -317,7 +317,7 @@
 
 
 class LogoutAction(Action):
-    id = 'logout'
+    __regid__ = 'logout'
     __select__ = authenticated_user()
 
     title = _('logout')
@@ -341,21 +341,21 @@
 
 
 class SiteConfigurationAction(ManagersAction):
-    id = 'siteconfig'
+    __regid__ = 'siteconfig'
     title = _('site configuration')
     order = 10
 
 
 class ManageAction(ManagersAction):
-    id = 'manage'
+    __regid__ = 'manage'
     title = _('manage')
     order = 20
 
 class SiteInfoAction(ManagersAction):
-    id = 'siteinfo'
+    __regid__ = 'siteinfo'
+    __select__ = match_user_groups('users','managers')
     title = _('info')
     order = 30
-    __select__ = match_user_groups('users','managers')
 
 
 from logilab.common.deprecation import class_moved
--- a/web/views/ajaxedit.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/ajaxedit.py	Wed Sep 23 09:29:39 2009 +0200
@@ -19,10 +19,10 @@
     class attributes.
     """
     __registry__ = 'views'
+    __regid__ = 'xaddrelation'
     __select__ = (match_form_params('rtype', 'target')
                   | match_kwargs('rtype', 'target'))
     cw_property_defs = {} # don't want to inherit this from Box
-    id = 'xaddrelation'
     expected_kwargs = form_params = ('rtype', 'target')
 
     build_js = EditRelationBoxTemplate.build_reload_js_call
--- a/web/views/basecomponents.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/basecomponents.py	Wed Sep 23 09:29:39 2009 +0200
@@ -29,7 +29,7 @@
 
 class RQLInputForm(component.Component):
     """build the rql input form, usually displayed in the header"""
-    id = 'rqlinput'
+    __regid__ = 'rqlinput'
     cw_property_defs = VISIBLE_PROP_DEF
     visible = False
 
@@ -59,7 +59,7 @@
 
 class ApplLogo(component.Component):
     """build the instance logo, usually displayed in the header"""
-    id = 'logo'
+    __regid__ = 'logo'
     cw_property_defs = VISIBLE_PROP_DEF
     # don't want user to hide this component using an cwproperty
     site_wide = True
@@ -71,7 +71,7 @@
 
 class ApplHelp(component.Component):
     """build the help button, usually displayed in the header"""
-    id = 'help'
+    __regid__ = 'help'
     cw_property_defs = VISIBLE_PROP_DEF
     def call(self):
         self.w(u'<a href="%s" class="help" title="%s">&#160;</a>'
@@ -86,7 +86,7 @@
     cw_property_defs = VISIBLE_PROP_DEF
     # don't want user to hide this component using an cwproperty
     site_wide = True
-    id = 'loggeduserlink'
+    __regid__ = 'loggeduserlink'
 
     def call(self):
         if not self.req.cnx.anonymous_connection:
@@ -123,7 +123,7 @@
     section
     """
     __select__ = yes()
-    id = 'applmessages'
+    __regid__ = 'applmessages'
     # don't want user to hide this component using an cwproperty
     cw_property_defs = {}
 
@@ -140,7 +140,7 @@
 
 class ApplicationName(component.Component):
     """display the instance name"""
-    id = 'appliname'
+    __regid__ = 'appliname'
     cw_property_defs = VISIBLE_PROP_DEF
     # don't want user to hide this component using an cwproperty
     site_wide = True
@@ -154,7 +154,7 @@
 
 class SeeAlsoVComponent(component.RelatedObjectsVComponent):
     """display any entity's see also"""
-    id = 'seealso'
+    __regid__ = 'seealso'
     context = 'navcontentbottom'
     rtype = 'see_also'
     role = 'subject'
@@ -168,7 +168,7 @@
     """displays the list of entity types contained in the resultset
     to be able to filter accordingly.
     """
-    id = 'etypenavigation'
+    __regid__ = 'etypenavigation'
     __select__ = two_etypes_rset() | match_form_params('__restrtype', '__restrtypes',
                                                        '__restrrql')
     cw_property_defs = VISIBLE_PROP_DEF
@@ -216,7 +216,7 @@
         self.w(u'</div>')
 
 class PdfViewComponent(component.Component):
-    id = 'pdfview'
+    __regid__ = 'pdfview'
     __select__ = yes()
 
     context = 'header'
--- a/web/views/basecontrollers.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/basecontrollers.py	Wed Sep 23 09:29:39 2009 +0200
@@ -64,7 +64,7 @@
 
 
 class LoginController(Controller):
-    id = 'login'
+    __regid__ = 'login'
 
     def publish(self, rset=None):
         """log in the instance"""
@@ -77,7 +77,7 @@
 
 
 class LogoutController(Controller):
-    id = 'logout'
+    __regid__ = 'logout'
 
     def publish(self, rset=None):
         """logout from the instance"""
@@ -89,7 +89,7 @@
     - build result set
     - select and call main template
     """
-    id = 'view'
+    __regid__ = 'view'
     template = 'main-template'
 
     def publish(self, rset=None):
@@ -208,7 +208,7 @@
 
 
 class FormValidatorController(Controller):
-    id = 'validateform'
+    __regid__ = 'validateform'
 
     def response(self, domid, status, args, entity):
         callback = str(self.req.form.get('__onsuccess', 'null'))
@@ -232,7 +232,7 @@
 
 
 class JSonController(Controller):
-    id = 'json'
+    __regid__ = 'json'
 
     def publish(self, rset=None):
         """call js_* methods. Expected form keys:
@@ -539,7 +539,7 @@
 
 
 class SendMailController(Controller):
-    id = 'sendmail'
+    __regid__ = 'sendmail'
     __select__ = match_user_groups('managers', 'users')
 
     def recipients(self):
@@ -588,7 +588,7 @@
 
 
 class MailBugReportController(SendMailController):
-    id = 'reportbug'
+    __regid__ = 'reportbug'
     __select__ = yes()
 
     def publish(self, rset=None):
--- a/web/views/basetemplates.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/basetemplates.py	Wed Sep 23 09:29:39 2009 +0200
@@ -43,7 +43,7 @@
 
 
 class LogInTemplate(LogInOutTemplate):
-    id = 'login'
+    __regid__ = 'login'
     title = 'log in'
 
     def content(self, w):
@@ -51,7 +51,7 @@
 
 
 class LoggedOutTemplate(LogInOutTemplate):
-    id = 'loggedout'
+    __regid__ = 'loggedout'
     title = 'logged out'
 
     def content(self, w):
@@ -78,7 +78,7 @@
 
 class NonTemplatableViewTemplate(MainTemplate):
     """main template for any non templatable views (xml, binaries, etc.)"""
-    id = 'main-template'
+    __regid__ = 'main-template'
     __select__ = ~templatable_view()
 
     def call(self, view):
@@ -101,7 +101,7 @@
 
     - call header / footer templates
     """
-    id = 'main-template'
+    __regid__ = 'main-template'
     __select__ = templatable_view()
 
     def call(self, view):
@@ -193,7 +193,7 @@
     main template. This template may be called for authentication error,
     which means that req.cnx and req.user may not be set.
     """
-    id = 'error-template'
+    __regid__ = 'error-template'
 
     def call(self):
         """display an unexpected error"""
@@ -222,7 +222,7 @@
 
 class SimpleMainTemplate(TheMainTemplate):
 
-    id = 'main-no-top'
+    __regid__ = 'main-no-top'
 
     def template_header(self, content_type, view=None, page_title='', additional_headers=()):
         page_title = page_title or view.page_title()
@@ -273,7 +273,7 @@
     from cubicweb.ext.xhtml2fo import ReportTransformer
 
     class PdfMainTemplate(TheMainTemplate):
-        id = 'pdf-main-template'
+        __regid__ = 'pdf-main-template'
 
         def call(self, view):
             """build the standard view, then when it's all done, convert xhtml to pdf
@@ -308,7 +308,7 @@
 
 class HTMLHeader(View):
     """default html headers"""
-    id = 'htmlheader'
+    __regid__ = 'htmlheader'
 
     def call(self, **kwargs):
         self.favicon()
@@ -352,7 +352,7 @@
 
 class HTMLPageHeader(View):
     """default html page header"""
-    id = 'header'
+    __regid__ = 'header'
     main_cell_components = ('appliname', 'breadcrumbs')
 
     def call(self, view, **kwargs):
@@ -419,7 +419,7 @@
 class HTMLPageFooter(View):
     """default html page footer: include logo if any, and close the HTML body
     """
-    id = 'footer'
+    __regid__ = 'footer'
 
     def call(self, **kwargs):
         req = self.req
@@ -440,7 +440,7 @@
     * include message component if selectable for this request
     * include selectable content navigation components
     """
-    id = 'contentheader'
+    __regid__ = 'contentheader'
 
     def call(self, view, **kwargs):
         """by default, display informal messages in content header"""
@@ -457,7 +457,7 @@
     """default html page content footer: include selectable content navigation
     components
     """
-    id = 'contentfooter'
+    __regid__ = 'contentfooter'
 
     def call(self, view, **kwargs):
         components = self.vreg['contentnavigation'].poss_visible_objects(
@@ -470,7 +470,7 @@
 
 
 class LogFormTemplate(View):
-    id = 'logform'
+    __regid__ = 'logform'
     __select__ = match_kwargs('id', 'klass')
 
     title = 'log in'
--- a/web/views/baseviews.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/baseviews.py	Wed Sep 23 09:29:39 2009 +0200
@@ -30,7 +30,7 @@
 
 class NullView(AnyRsetView):
     """default view when no result has been found"""
-    id = 'null'
+    __regid__ = 'null'
     __select__ = yes()
     def call(self, **kwargs):
         pass
@@ -40,7 +40,7 @@
 class NoResultView(View):
     """default view when no result has been found"""
     __select__ = empty_rset()
-    id = 'noresult'
+    __regid__ = 'noresult'
 
     def call(self, **kwargs):
         self.w(u'<div class="searchMessage"><strong>%s</strong></div>\n'
@@ -51,7 +51,7 @@
     """display values without any transformation (i.e. get a number for
     entities)
     """
-    id = 'final'
+    __regid__ = 'final'
     # record generated i18n catalog messages
     _('%d&#160;years')
     _('%d&#160;months')
@@ -112,7 +112,7 @@
 
 # XXX deprecated
 class SecondaryView(EntityView):
-    id = 'secondary'
+    __regid__ = 'secondary'
     title = _('secondary')
 
     def cell_call(self, row, col):
@@ -125,7 +125,7 @@
 
 
 class OneLineView(EntityView):
-    id = 'oneline'
+    __regid__ = 'oneline'
     title = _('oneline')
 
     def cell_call(self, row, col):
@@ -139,7 +139,7 @@
 
 class TextView(EntityView):
     """the simplest text view for an entity"""
-    id = 'text'
+    __regid__ = 'text'
     title = _('text')
     content_type = 'text/plain'
 
@@ -166,7 +166,7 @@
 
 class MetaDataView(EntityView):
     """paragraph view of some metadata"""
-    id = 'metadata'
+    __regid__ = 'metadata'
     show_eid = True
 
     def cell_call(self, row, col):
@@ -191,7 +191,7 @@
 
 
 class InContextTextView(TextView):
-    id = 'textincontext'
+    __regid__ = 'textincontext'
     title = None # not listed as a possible view
     def cell_call(self, row, col):
         entity = self.rset.get_entity(row, col)
@@ -199,7 +199,7 @@
 
 
 class OutOfContextTextView(InContextTextView):
-    id = 'textoutofcontext'
+    __regid__ = 'textoutofcontext'
 
     def cell_call(self, row, col):
         entity = self.rset.get_entity(row, col)
@@ -207,7 +207,7 @@
 
 
 class InContextView(EntityView):
-    id = 'incontext'
+    __regid__ = 'incontext'
 
     def cell_call(self, row, col):
         entity = self.rset.get_entity(row, col)
@@ -220,7 +220,7 @@
 
 
 class OutOfContextView(EntityView):
-    id = 'outofcontext'
+    __regid__ = 'outofcontext'
 
     def cell_call(self, row, col):
         entity = self.rset.get_entity(row, col)
@@ -235,7 +235,7 @@
 # list views ##################################################################
 
 class ListView(EntityView):
-    id = 'list'
+    __regid__ = 'list'
     title = _('list')
     item_vid = 'listitem'
 
@@ -269,7 +269,7 @@
 
 
 class ListItemView(EntityView):
-    id = 'listitem'
+    __regid__ = 'listitem'
 
     @property
     def redirect_vid(self):
@@ -290,13 +290,13 @@
 
 class SimpleListView(ListItemView):
     """list without bullets"""
-    id = 'simplelist'
+    __regid__ = 'simplelist'
     redirect_vid = 'incontext'
 
 
 class AdaptedListView(EntityView):
     """list of entities of the same type"""
-    id = 'adaptedlist'
+    __regid__ = 'adaptedlist'
     __select__ = EntityView.__select__ & one_etype_rset()
     item_vid = 'adaptedlistitem'
 
@@ -316,11 +316,11 @@
 
 
 class AdaptedListItemView(ListItemView):
-    id = 'adaptedlistitem'
+    __regid__ = 'adaptedlistitem'
 
 
 class CSVView(SimpleListView):
-    id = 'csv'
+    __regid__ = 'csv'
     redirect_vid = 'incontext'
 
     def call(self, **kwargs):
@@ -332,7 +332,7 @@
 
 
 class TreeItemView(ListItemView):
-    id = 'treeitem'
+    __regid__ = 'treeitem'
 
     def cell_call(self, row, col):
         self.wview('incontext', self.rset, row=row, col=col)
@@ -344,7 +344,7 @@
 
     XXX: finish me (fixed line width, fixed number of lines, CSS, etc.)
     """
-    id = 'tsearch'
+    __regid__ = 'tsearch'
 
     def cell_call(self, row, col, **kwargs):
         entity = self.complete_entity(row, col)
@@ -374,7 +374,7 @@
 
 class TooltipView(EntityView):
     """A entity view used in a tooltip"""
-    id = 'tooltip'
+    __regid__ = 'tooltip'
     def cell_call(self, row, col):
         self.wview('oneline', self.rset, row=row, col=col)
 
--- a/web/views/boxes.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/boxes.py	Wed Sep 23 09:29:39 2009 +0200
@@ -33,7 +33,7 @@
     box with all actions impacting the entity displayed: edit, copy, delete
     change state, add related entities
     """
-    id = 'edit_box'
+    __regid__ = 'edit_box'
     __select__ = BoxTemplate.__select__ & non_final_entity()
 
     title = _('actions')
@@ -106,7 +106,7 @@
 
 class SearchBox(BoxTemplate):
     """display a box with a simple search form"""
-    id = 'search_box'
+    __regid__ = 'search_box'
 
     visible = True # enabled by default
     title = _('search')
@@ -139,7 +139,7 @@
 
 class PossibleViewsBox(BoxTemplate):
     """display a box containing links to all possible views"""
-    id = 'possible_views_box'
+    __regid__ = 'possible_views_box'
     __select__ = BoxTemplate.__select__ & match_user_groups('users', 'managers')
 
     visible = False
@@ -162,7 +162,7 @@
 
 class StartupViewsBox(BoxTemplate):
     """display a box containing links to all startup views"""
-    id = 'startup_views_box'
+    __regid__ = 'startup_views_box'
     visible = False # disabled by default
     title = _('startup views')
     order = 70
@@ -181,7 +181,7 @@
 
 class SideBoxView(EntityView):
     """helper view class to display some entities in a sidebox"""
-    id = 'sidebox'
+    __regid__ = 'sidebox'
 
     def call(self, boxclass='sideBox', title=u''):
         """display a list of entities by calling their <item_vid> view"""
--- a/web/views/calendar.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/calendar.py	Wed Sep 23 09:29:39 2009 +0200
@@ -44,7 +44,7 @@
         content_type = 'text/calendar'
         title = _('iCalendar')
         templatable = False
-        id = 'ical'
+        __regid__ = 'ical'
 
         def call(self):
             ical = iCalendar()
@@ -71,7 +71,7 @@
 
     Does apply to ICalendarable compatible entities
     """
-    id = 'hcal'
+    __regid__ = 'hcal'
     __select__ = implements(ICalendarable)
     need_navigation = False
     title = _('hCalendar')
@@ -94,7 +94,7 @@
 
 
 class CalendarItemView(EntityView):
-    id = 'calendaritem'
+    __regid__ = 'calendaritem'
 
     def cell_call(self, row, col, dates=False):
         task = self.complete_entity(row)
@@ -106,7 +106,7 @@
                 self.w('<br/>to %s'%self.format_date(task.stop))
 
 class CalendarLargeItemView(CalendarItemView):
-    id = 'calendarlargeitem'
+    __regid__ = 'calendarlargeitem'
 
 
 class _TaskEntry(object):
@@ -129,7 +129,7 @@
 
 class OneMonthCal(EntityView):
     """At some point, this view will probably replace ampm calendars"""
-    id = 'onemonthcal'
+    __regid__ = 'onemonthcal'
     __select__ = implements(ICalendarable)
     need_navigation = False
     title = _('one month')
@@ -320,7 +320,7 @@
 
 class OneWeekCal(EntityView):
     """At some point, this view will probably replace ampm calendars"""
-    id = 'oneweekcal'
+    __regid__ = 'oneweekcal'
     __select__ = implements(ICalendarable)
     need_navigation = False
     title = _('one week')
--- a/web/views/csvexport.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/csvexport.py	Wed Sep 23 09:29:39 2009 +0200
@@ -33,7 +33,7 @@
 
 class CSVRsetView(CSVMixIn, AnyRsetView):
     """dumps raw result set in CSV"""
-    id = 'csvexport'
+    __regid__ = 'csvexport'
     title = _('csv export')
 
     def call(self):
@@ -64,7 +64,7 @@
     resultset. ('table' here only means empty lines separation between table
     contents)
     """
-    id = 'ecsvexport'
+    __regid__ = 'ecsvexport'
     title = _('csv entities export')
 
     def call(self):
--- a/web/views/cwproperties.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/cwproperties.py	Wed Sep 23 09:29:39 2009 +0200
@@ -65,7 +65,7 @@
 
 class SystemCWPropertiesForm(FormViewMixIn, StartupView):
     """site-wide properties edition form"""
-    id = 'systempropertiesform'
+    __regid__ = 'systempropertiesform'
     __select__ = none_rset() & match_user_groups('managers')
 
     title = _('site configuration')
@@ -227,7 +227,7 @@
 
 class CWPropertiesForm(SystemCWPropertiesForm):
     """user's preferences properties edition form"""
-    id = 'propertiesform'
+    __regid__ = 'propertiesform'
     __select__ = (
         (none_rset() & match_user_groups('users','managers'))
         | (one_line_rset() & match_user_groups('users') & is_user_prefs())
@@ -360,7 +360,7 @@
 
 class CWPropertiesFormRenderer(formrenderers.FormRenderer):
     """specific renderer for properties"""
-    id = 'cwproperties'
+    __regid__ = 'cwproperties'
 
     def open_form(self, form, values):
         err = '<div class="formsg"></div>'
--- a/web/views/cwuser.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/cwuser.py	Wed Sep 23 09:29:39 2009 +0200
@@ -17,7 +17,7 @@
 uicfg.primaryview_section.tag_attribute(('CWUser', 'login'), 'hidden')
 
 class UserPreferencesEntityAction(action.Action):
-    id = 'prefs'
+    __regid__ = 'prefs'
     __select__ = (one_line_rset() & implements('CWUser') &
                   match_user_groups('owners', 'managers'))
 
@@ -30,7 +30,7 @@
 
 
 class FoafView(EntityView):
-    id = 'foaf'
+    __regid__ = 'foaf'
     __select__ = implements('CWUser')
 
     title = _('foaf')
--- a/web/views/debug.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/debug.py	Wed Sep 23 09:29:39 2009 +0200
@@ -26,7 +26,7 @@
 
 
 class DebugView(StartupView):
-    id = 'debug'
+    __regid__ = 'debug'
     __select__ = none_rset() & match_user_groups('managers')
     title = _('server debug information')
 
@@ -60,3 +60,27 @@
             w(u'</ul>')
         else:
             w(u'<p>no web sessions found</p>')
+
+
+class RegistryView(StartupView):
+    __regid__ = 'registry'
+    __select__ = StartupView.__select__ & match_user_groups('managers')
+    title = _('registry')
+
+    def call(self, **kwargs):
+        """The default view representing the instance's management"""
+        self.w(u'<h1>%s</h1>' % _("Registry's content"))
+        keys = sorted(self.vreg)
+        self.w(u'<p>%s</p>\n' % ' - '.join('<a href="/_registry#%s">%s</a>'
+                                           % (key, key) for key in keys))
+        for key in keys:
+            self.w(u'<h2><a name="%s">%s</a></h2>' % (key,key))
+            items = self.vreg[key].items()
+            if items:
+                self.w(u'<table><tbody>')
+                for key, value in sorted(items):
+                    self.w(u'<tr><td>%s</td><td>%s</td></tr>'
+                           % (key, xml_escape(repr(value))))
+                self.w(u'</tbody></table>\n')
+            else:
+                self.w(u'<p>Empty</p>\n')
--- a/web/views/editcontroller.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/editcontroller.py	Wed Sep 23 09:29:39 2009 +0200
@@ -23,7 +23,7 @@
     """
 
 class EditController(ViewController):
-    id = 'edit'
+    __regid__ = 'edit'
 
     def publish(self, rset=None):
         """edit / create / copy / delete entity / relations"""
--- a/web/views/editforms.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/editforms.py	Wed Sep 23 09:29:39 2009 +0200
@@ -45,7 +45,7 @@
 
 
 class DeleteConfForm(forms.CompositeForm):
-    id = 'deleteconf'
+    __regid__ = 'deleteconf'
     __select__ = non_final_entity()
 
     domid = 'deleteconf'
@@ -70,7 +70,7 @@
 
 class DeleteConfFormView(FormViewMixIn, EntityView):
     """form used to confirm deletion of some entities"""
-    id = 'deleteconf'
+    __regid__ = 'deleteconf'
     title = _('delete')
     # don't use navigation, all entities asked to be deleted should be displayed
     # else we will only delete the displayed page
@@ -101,7 +101,7 @@
 
     (double-click on the field to see an appropriate edition widget).
     """
-    id = 'doreledit'
+    __regid__ = 'doreledit'
     __select__ = non_final_entity() & match_kwargs('rtype')
     # FIXME editableField class could be toggleable from userprefs
 
@@ -262,7 +262,7 @@
     """same as ClickAndEditFormView but checking if the view *should* be applied
     by checking uicfg configuration and composite relation property.
     """
-    id = 'reledit'
+    __regid__ = 'reledit'
 
     def should_edit_relation(self, entity, rschema, role, rvid):
         eschema = entity.e_schema
@@ -282,7 +282,7 @@
 
 class EditionFormView(FormViewMixIn, EntityView):
     """display primary entity edition form"""
-    id = 'edition'
+    __regid__ = 'edition'
     # add yes() so it takes precedence over deprecated views in baseforms,
     # though not baseforms based customized view
     __select__ = one_line_rset() & non_final_entity() & yes()
@@ -319,7 +319,7 @@
 
 class CreationFormView(EditionFormView):
     """display primary entity creation form"""
-    id = 'creation'
+    __regid__ = 'creation'
     __select__ = specified_etype_implements('Any') & yes()
 
     title = _('creation')
@@ -369,7 +369,7 @@
     """display primary entity creation form initialized with values from another
     entity
     """
-    id = 'copy'
+    __regid__ = 'copy'
     warning_message = _('Please note that this is only a shallow copy')
 
     def render_form(self, entity):
@@ -405,7 +405,7 @@
 
 
 class TableEditForm(forms.CompositeForm):
-    id = 'muledit'
+    __regid__ = 'muledit'
     domid = 'entityForm'
     onsubmit = "return validateForm('%s', null);" % domid
     form_buttons = [SubmitButton(_('validate modifications on selected items')),
@@ -425,7 +425,7 @@
 
 
 class TableEditFormView(FormViewMixIn, EntityView):
-    id = 'muledit'
+    __regid__ = 'muledit'
     __select__ = EntityView.__select__ & yes()
     title = _('multiple edit')
 
@@ -439,7 +439,7 @@
 
 
 class InlineEntityEditionFormView(FormViewMixIn, EntityView):
-    id = 'inline-edition'
+    __regid__ = 'inline-edition'
     __select__ = non_final_entity() & match_kwargs('peid', 'rtype')
     removejs = "removeInlinedEntity('%s', '%s', '%s')"
 
@@ -506,7 +506,7 @@
 
 
 class InlineEntityCreationFormView(InlineEntityEditionFormView):
-    id = 'inline-creation'
+    __regid__ = 'inline-creation'
     __select__ = (match_kwargs('peid', 'rtype')
                   & specified_etype_implements('Any'))
     removejs = "removeInlineForm('%s', '%s', '%s')"
--- a/web/views/editviews.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/editviews.py	Wed Sep 23 09:29:39 2009 +0200
@@ -27,7 +27,7 @@
     """view called by the edition view when the user asks to search for
     something to link to the edited eid
     """
-    id = 'search-associate'
+    __regid__ = 'search-associate'
     __select__ = (one_line_rset() & match_search_state('linksearch')
                   & non_final_entity())
 
@@ -58,7 +58,7 @@
 
 
 class OutOfContextSearch(EntityView):
-    id = 'outofcontext-search'
+    __regid__ = 'outofcontext-search'
     def cell_call(self, row, col):
         entity = self.rset.get_entity(row, col)
         erset = entity.as_rset()
@@ -74,7 +74,7 @@
 
 
 class UnrelatedDivs(EntityView):
-    id = 'unrelateddivs'
+    __regid__ = 'unrelateddivs'
     __select__ = match_form_params('relation')
 
     def cell_call(self, row, col):
@@ -184,7 +184,7 @@
 
     THIS IS A TEXT VIEW. DO NOT HTML_ESCAPE
     """
-    id = 'combobox'
+    __regid__ = 'combobox'
     title = None
 
     def cell_call(self, row, col):
@@ -196,7 +196,7 @@
 
 class EditableFinalView(FinalView):
     """same as FinalView but enables inplace-edition when possible"""
-    id = 'editable-final'
+    __regid__ = 'editable-final'
 
     def cell_call(self, row, col, props=None):
         entity, rtype = self.rset.related_entity(row, col)
--- a/web/views/emailaddress.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/emailaddress.py	Wed Sep 23 09:29:39 2009 +0200
@@ -55,7 +55,7 @@
 
 class EmailAddressShortPrimaryView(EmailAddressPrimaryView):
     __select__ = implements('EmailAddress')
-    id = 'shortprimary'
+    __regid__ = 'shortprimary'
     title = None # hidden view
 
     def render_entity_attributes(self, entity):
@@ -85,7 +85,7 @@
     """A one line view that builds a user clickable URL for an email with
     'mailto:'"""
 
-    id = 'mailto'
+    __regid__ = 'mailto'
     __select__ = implements('EmailAddress')
 
     def cell_call(self, row, col, **kwargs):
--- a/web/views/embedding.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/embedding.py	Wed Sep 23 09:29:39 2009 +0200
@@ -29,7 +29,7 @@
 class ExternalTemplate(basetemplates.TheMainTemplate):
     """template embeding an external web pages into CubicWeb web interface
     """
-    id = 'external'
+    __regid__ = 'external'
 
     def call(self, body):
         # XXX fallback to HTML 4 mode when embeding ?
@@ -44,7 +44,7 @@
 
 
 class EmbedController(Controller):
-    id = 'embed'
+    __regid__ = 'embed'
     template = 'external'
 
     def publish(self, rset=None):
@@ -92,7 +92,7 @@
     """display an 'embed' link on entity implementing `embeded_url` method
     if the returned url match embeding configuration
     """
-    id = 'embed'
+    __regid__ = 'embed'
     __select__ = (one_line_rset() & match_search_state('normal')
                   & implements(IEmbedable)
                   & score_entity(entity_has_embedable_url))
--- a/web/views/error.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/error.py	Wed Sep 23 09:29:39 2009 +0200
@@ -11,7 +11,7 @@
 from cubicweb.view import StartupView
 
 class FourOhFour(StartupView):
-    id = '404'
+    __regid__ = '404'
 
     def call(self):
         _ = self.req._
@@ -19,7 +19,7 @@
 
 
 class ErrorOccured(StartupView):
-    id = '500'
+    __regid__ = '500'
 
     def call(self):
         _ = self.req._
--- a/web/views/facets.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/facets.py	Wed Sep 23 09:29:39 2009 +0200
@@ -29,7 +29,7 @@
 
 class FilterBox(BoxTemplate):
     """filter results of a query"""
-    id = 'filter_box'
+    __regid__ = 'filter_box'
     __select__ = (((non_final_entity() & two_lines_rset())
                    | contextview_selector()
                    ) & match_context_prop())
@@ -125,23 +125,23 @@
 # facets ######################################################################
 
 class CreatedByFacet(RelationFacet):
-    id = 'created_by-facet'
+    __regid__ = 'created_by-facet'
     rtype = 'created_by'
     target_attr = 'login'
 
 class InGroupFacet(RelationFacet):
-    id = 'in_group-facet'
+    __regid__ = 'in_group-facet'
     rtype = 'in_group'
     target_attr = 'name'
 
 class InStateFacet(RelationFacet):
-    id = 'in_state-facet'
+    __regid__ = 'in_state-facet'
     rtype = 'in_state'
     target_attr = 'name'
 
 # inherit from RelationFacet to benefit from its possible_values implementation
 class ETypeFacet(RelationFacet):
-    id = 'etype-facet'
+    __regid__ = 'etype-facet'
     __select__ = yes()
     order = 1
     rtype = 'is'
@@ -182,7 +182,7 @@
 
 class HasTextFacet(AbstractFacet):
     __select__ = relation_possible('has_text', 'subject') & match_context_prop()
-    id = 'has_text-facet'
+    __regid__ = 'has_text-facet'
     rtype = 'has_text'
     role = 'subject'
     order = 0
--- a/web/views/formrenderers.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/formrenderers.py	Wed Sep 23 09:29:39 2009 +0200
@@ -39,7 +39,7 @@
     +---------+
     """
     __registry__ = 'formrenderers'
-    id = 'default'
+    __regid__ = 'default'
 
     _options = ('display_fields', 'display_label', 'display_help',
                 'display_progress_div', 'table_class', 'button_bar_class',
@@ -246,7 +246,7 @@
     """use form_renderer_id = 'base' if you want base FormRenderer layout even
     when selected for an entity
     """
-    id = 'base'
+    __regid__ = 'base'
 
 
 class EntityBaseFormRenderer(BaseFormRenderer):
@@ -275,7 +275,7 @@
     | field1 input | field2 input | buttons
     +--------------+--------------+---------+
     """
-    id = 'htable'
+    __regid__ = 'htable'
 
     display_help = False
     def _render_fields(self, fields, w, form):
@@ -312,7 +312,7 @@
 
 class EntityCompositeFormRenderer(FormRenderer):
     """specific renderer for multiple entities edition form (muledit)"""
-    id = 'composite'
+    __regid__ = 'composite'
 
     _main_display_fields = None
 
@@ -372,7 +372,7 @@
 
 class EntityFormRenderer(EntityBaseFormRenderer):
     """specific renderer for entity edition form (edition)"""
-    id = 'default'
+    __regid__ = 'default'
     # needs some additional points in some case (XXX explain cases)
     __select__ = EntityBaseFormRenderer.__select__ & yes()
 
@@ -532,7 +532,7 @@
     """specific renderer for entity inlined edition form
     (inline-[creation|edition])
     """
-    id = 'inline'
+    __regid__ = 'inline'
 
     def render(self, form, values):
         form.add_media()
--- a/web/views/forms.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/forms.py	Wed Sep 23 09:29:39 2009 +0200
@@ -54,7 +54,7 @@
 
     * `fieldsets_in_order`: fieldset name sequence, to control order
     """
-    id = 'base'
+    __regid__ = 'base'
 
     is_subform = False
     internal_fields = ('__errorurl',) + NAV_FORM_PARAMETERS
@@ -288,7 +288,7 @@
 
 
 class EntityFieldsForm(FieldsForm):
-    id = 'base'
+    __regid__ = 'base'
     __select__ = (match_kwargs('entity')
                   | (one_line_rset() & non_final_entity()))
 
@@ -541,7 +541,7 @@
 
 class CompositeForm(FieldsForm):
     """form composed of sub-forms"""
-    id = 'composite'
+    __regid__ = 'composite'
     form_renderer_id = id
 
     def __init__(self, *args, **kwargs):
@@ -556,7 +556,7 @@
 
 class CompositeEntityForm(EntityFieldsForm):
     """form composed of sub-forms"""
-    id = 'composite'
+    __regid__ = 'composite'
     form_renderer_id = id
 
     def __init__(self, *args, **kwargs):
--- a/web/views/ibreadcrumbs.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/ibreadcrumbs.py	Wed Sep 23 09:29:39 2009 +0200
@@ -20,7 +20,7 @@
 
 
 class BreadCrumbEntityVComponent(Component):
-    id = 'breadcrumbs'
+    __regid__ = 'breadcrumbs'
     __select__ = one_line_rset() & implements(IBreadCrumbs)
 
     property_defs = {
@@ -94,7 +94,7 @@
 
 
 class BreadCrumbView(EntityView):
-    id = 'breadcrumbs'
+    __regid__ = 'breadcrumbs'
 
     def cell_call(self, row, col):
         entity = self.rset.get_entity(row, col)
@@ -105,7 +105,7 @@
 
 
 class BreadCrumbTextView(EntityView):
-    id = 'breadcrumbtext'
+    __regid__ = 'breadcrumbtext'
 
     def cell_call(self, row, col):
         entity = self.rset.get_entity(row, col)
--- a/web/views/idownloadable.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/idownloadable.py	Wed Sep 23 09:29:39 2009 +0200
@@ -42,7 +42,7 @@
 
 
 class DownloadBox(EntityBoxTemplate):
-    id = 'download_box'
+    __regid__ = 'download_box'
     # no download box for images
     # XXX primary_view selector ?
     __select__ = (one_line_rset() & implements(IDownloadable) &
@@ -58,7 +58,7 @@
     """this view is replacing the deprecated 'download' controller and allow
     downloading of entities providing the necessary interface
     """
-    id = 'download'
+    __regid__ = 'download'
     __select__ = one_line_rset() & implements(IDownloadable)
 
     templatable = False
@@ -85,7 +85,7 @@
 
 class DownloadLinkView(EntityView):
     """view displaying a link to download the file"""
-    id = 'downloadlink'
+    __regid__ = 'downloadlink'
     __select__ = implements(IDownloadable)
     title = None # should not be listed in possible views
 
@@ -132,7 +132,7 @@
 
 
 class ImageView(EntityView):
-    id = 'image'
+    __regid__ = 'image'
     __select__ = implements(IDownloadable) & score_entity(is_image)
 
     title = _('image')
--- a/web/views/igeocodable.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/igeocodable.py	Wed Sep 23 09:29:39 2009 +0200
@@ -14,13 +14,13 @@
 from cubicweb.selectors import implements
 
 class GeocodingJsonView(EntityView):
-    id = 'geocoding-json'
+    __regid__ = 'geocoding-json'
+    __select__ = implements(IGeocodable)
+
     binary = True
     templatable = False
     content_type = 'application/json'
 
-    __select__ = implements(IGeocodable)
-
     def call(self):
         # remove entities that don't define latitude and longitude
         self.rset = self.rset.filtered_rset(lambda e: e.latitude and e.longitude)
@@ -57,8 +57,7 @@
 
 
 class GoogleMapBubbleView(EntityView):
-    id = 'gmap-bubble'
-
+    __regid__ = 'gmap-bubble'
     __select__ = implements(IGeocodable)
 
     def cell_call(self, row, col):
@@ -68,9 +67,9 @@
 
 
 class GoogleMapsView(EntityView):
-    id = 'gmap-view'
+    __regid__ = 'gmap-view'
+    __select__ = implements(IGeocodable)
 
-    __select__ = implements(IGeocodable)
     need_navigation = False
 
     def call(self, gmap_key, width=400, height=400, uselabel=True, urlparams=None):
@@ -91,7 +90,7 @@
 
 
 class GoogeMapsLegend(EntityView):
-    id = 'gmap-legend'
+    __regid__ = 'gmap-legend'
 
     def call(self):
         self.w(u'<ol>')
--- a/web/views/iprogress.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/iprogress.py	Wed Sep 23 09:29:39 2009 +0200
@@ -34,7 +34,7 @@
     header_for_COLNAME methods allow to customize header's label
     """
 
-    id = 'progress_table_view'
+    __regid__ = 'progress_table_view'
     title = _('task progression')
     __select__ = implements(IMileStone)
 
@@ -165,7 +165,7 @@
     """this views redirects to ``progress_table_view`` but removes
     the ``project`` column
     """
-    id = 'ic_progress_table_view'
+    __regid__ = 'ic_progress_table_view'
 
     def call(self, columns=None):
         view = self.vreg['views'].select('progress_table_view', self.req,
@@ -180,7 +180,7 @@
 
 class ProgressBarView(EntityView):
     """displays a progress bar"""
-    id = 'progressbar'
+    __regid__ = 'progressbar'
     title = _('progress bar')
     __select__ = implements(IProgress)
 
--- a/web/views/isioc.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/isioc.py	Wed Sep 23 09:29:39 2009 +0200
@@ -14,7 +14,7 @@
 from cubicweb.interfaces import ISiocItem, ISiocContainer
 
 class SIOCView(EntityView):
-    id = 'sioc'
+    __regid__ = 'sioc'
     __select__ = EntityView.__select__ & implements(ISiocItem, ISiocContainer)
     title = _('sioc')
     templatable = False
@@ -38,7 +38,7 @@
         self.wview('sioc_element', self.rset, row=row, col=col)
 
 class SIOCContainerView(EntityView):
-    id = 'sioc_element'
+    __regid__ = 'sioc_element'
     __select__ = EntityView.__select__ & implements(ISiocContainer)
     templatable = False
     content_type = 'text/xml'
@@ -59,7 +59,7 @@
 
 
 class SIOCItemView(EntityView):
-    id = 'sioc_element'
+    __regid__ = 'sioc_element'
     __select__ = EntityView.__select__ & implements(ISiocItem)
     templatable = False
     content_type = 'text/xml'
--- a/web/views/magicsearch.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/magicsearch.py	Wed Sep 23 09:29:39 2009 +0200
@@ -15,7 +15,7 @@
 from rql import RQLSyntaxError, BadRQLQuery, parse
 from rql.nodes import Relation
 
-from cubicweb import Unauthorized
+from cubicweb import Unauthorized, typed_eid
 from cubicweb.view import Component
 
 LOGGER = getLogger('cubicweb.magicsearch')
@@ -135,7 +135,7 @@
 
 class BaseQueryProcessor(Component):
     __abstract__ = True
-    id = 'magicsearch_processor'
+    __regid__ = 'magicsearch_processor'
     # set something if you want explicit component search facility for the
     # component
     name = None
@@ -239,7 +239,7 @@
         """
         # if this is an integer, then directly go to eid
         try:
-            eid = int(word)
+            eid = typed_eid(word)
             return 'Any X WHERE X eid %(x)s', {'x': eid}, 'x'
         except ValueError:
             etype = self._get_entity_type(word)
--- a/web/views/management.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/management.py	Wed Sep 23 09:29:39 2009 +0200
@@ -67,7 +67,7 @@
 
 class SecurityManagementView(EntityView, SecurityViewMixIn):
     """display security information for a given entity"""
-    id = 'security'
+    __regid__ = 'security'
     __select__ = EntityView.__select__ & authenticated_user()
 
     title = _('security')
@@ -191,7 +191,7 @@
 class ErrorView(AnyRsetView):
     """default view when no result has been found"""
     __select__ = yes()
-    id = 'error'
+    __regid__ = 'error'
 
     def page_title(self):
         """returns a title according to the result set - used for the
@@ -274,7 +274,7 @@
 
 
 class ProcessInformationView(StartupView):
-    id = 'info'
+    __regid__ = 'info'
     __select__ = none_rset() & match_user_groups('users', 'managers')
 
     title = _('server information')
--- a/web/views/massmailing.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/massmailing.py	Wed Sep 23 09:29:39 2009 +0200
@@ -22,7 +22,7 @@
 
 
 class SendEmailAction(Action):
-    id = 'sendemail'
+    __regid__ = 'sendemail'
     # XXX should check email is set as well
     __select__ = implements(IEmailable) & match_user_groups('managers', 'users')
 
@@ -38,7 +38,7 @@
 
 
 class MassMailingForm(forms.FieldsForm):
-    id = 'massmailing'
+    __regid__ = 'massmailing'
 
     sender = StringField(widget=TextInput({'disabled': 'disabled'}), label=_('From:'))
     recipient = StringField(widget=CheckBox(), label=_('Recipients:'))
@@ -82,7 +82,7 @@
 
 
 class MassMailingFormRenderer(formrenderers.FormRenderer):
-    id = 'massmailing'
+    __regid__ = 'massmailing'
     button_bar_class = u'toolbar'
 
     def _render_fields(self, fields, w, form):
@@ -118,7 +118,7 @@
         pass
 
 class MassMailingFormView(FormViewMixIn, EntityView):
-    id = 'massmailing'
+    __regid__ = 'massmailing'
     __select__ = implements(IEmailable) & match_user_groups('managers', 'users')
 
     def call(self):
--- a/web/views/navigation.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/navigation.py	Wed Sep 23 09:29:39 2009 +0200
@@ -177,7 +177,7 @@
 View.paginate = paginate
 
 class NextPrevNavigationComponent(EntityVComponent):
-    id = 'prevnext'
+    __regid__ = 'prevnext'
     # register msg not generated since no entity implements IPrevNext in cubicweb
     # itself
     title = _('contentnavigation_prevnext')
--- a/web/views/old_calendar.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/old_calendar.py	Wed Sep 23 09:29:39 2009 +0200
@@ -162,7 +162,7 @@
 
 
 class YearCalendarView(_CalendarView):
-    id = 'calendaryear'
+    __regid__ = 'calendaryear'
     title = _('calendar (year)')
 
     def call(self, year=None, month=None):
@@ -181,7 +181,7 @@
     """this view renders three semesters as three rows of six columns,
     one column per month
     """
-    id = 'calendarsemester'
+    __regid__ = 'calendarsemester'
     title = _('calendar (semester)')
 
     def call(self, year=None, month=None):
@@ -229,7 +229,7 @@
 
 class MonthCalendarView(_CalendarView):
     """this view renders a 3x1 calendars' table"""
-    id = 'calendarmonth'
+    __regid__ = 'calendarmonth'
     title = _('calendar (month)')
 
     def call(self, year=None, month=None):
@@ -246,7 +246,7 @@
 
 class WeekCalendarView(_CalendarView):
     """this view renders a calendar for week events"""
-    id = 'calendarweek'
+    __regid__ = 'calendarweek'
     title = _('calendar (week)')
 
     def call(self, year=None, week=None):
@@ -303,7 +303,7 @@
 
 
 class AMPMYearCalendarView(YearCalendarView):
-    id = 'ampmcalendaryear'
+    __regid__ = 'ampmcalendaryear'
     title = _('am/pm calendar (year)')
 
     def build_calendar(self, schedule, first_day):
@@ -357,7 +357,7 @@
 
 class AMPMSemesterCalendarView(SemesterCalendarView):
     """this view renders a 3x1 calendars' table"""
-    id = 'ampmcalendarsemester'
+    __regid__ = 'ampmcalendarsemester'
     title = _('am/pm calendar (semester)')
 
     def build_calendars(self, schedule, begin, end):
@@ -394,7 +394,7 @@
 
 class AMPMMonthCalendarView(MonthCalendarView):
     """this view renders a 3x1 calendars' table"""
-    id = 'ampmcalendarmonth'
+    __regid__ = 'ampmcalendarmonth'
     title = _('am/pm calendar (month)')
 
     def build_calendar(self, schedule, first_day):
@@ -450,7 +450,7 @@
 
 class AMPMWeekCalendarView(WeekCalendarView):
     """this view renders a 3x1 calendars' table"""
-    id = 'ampmcalendarweek'
+    __regid__ = 'ampmcalendarweek'
     title = _('am/pm calendar (week)')
 
     def build_calendar(self, schedule, weeks):
--- a/web/views/owl.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/owl.py	Wed Sep 23 09:29:39 2009 +0200
@@ -58,7 +58,7 @@
 
 class OWLView(StartupView):
     """This view export in owl format schema database. It is the TBOX"""
-    id = 'owl'
+    __regid__ = 'owl'
     title = _('owl')
     templatable = False
     content_type = 'application/xml' # 'text/xml'
@@ -145,7 +145,7 @@
 
 class OWLABOXView(EntityView):
     '''This view represents a part of the ABOX for a given entity.'''
-    id = 'owlabox'
+    __regid__ = 'owlabox'
     title = _('owlabox')
     templatable = False
     content_type = 'application/xml' # 'text/xml'
@@ -162,7 +162,7 @@
 
 class OWLABOXItemView(EntityView):
     '''This view represents a part of the ABOX for a given entity.'''
-    id = 'owlaboxitem'
+    __regid__ = 'owlaboxitem'
     templatable = False
     content_type = 'application/xml' # 'text/xml'
 
@@ -201,7 +201,7 @@
 
 
 class DownloadOWLSchemaAction(Action):
-    id = 'download_as_owl'
+    __regid__ = 'download_as_owl'
     __select__ = none_rset() & match_view('schema')
 
     category = 'mainactions'
--- a/web/views/primary.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/primary.py	Wed Sep 23 09:29:39 2009 +0200
@@ -20,7 +20,7 @@
 
 class PrimaryView(EntityView):
     """the full view of an non final entity"""
-    id = 'primary'
+    __regid__ = 'primary'
     title = _('primary')
     show_attr_label = True
     show_rel_label = True
@@ -204,7 +204,7 @@
 
 
 class RelatedView(EntityView):
-    id = 'autolimited'
+    __regid__ = 'autolimited'
     def call(self, title=None, **kwargs):
         # if not too many entities, show them all in a list
         maxrelated = self.req.property_value('navigation.related-limit')
--- a/web/views/pyviews.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/pyviews.py	Wed Sep 23 09:29:39 2009 +0200
@@ -11,7 +11,7 @@
 from cubicweb.selectors import match_kwargs
 
 class PyValTableView(View):
-    id = 'pyvaltable'
+    __regid__ = 'pyvaltable'
     __select__ = match_kwargs('pyvalue')
 
     def call(self, pyvalue, headers=None):
@@ -32,7 +32,7 @@
 
 
 class PyValListView(View):
-    id = 'pyvallist'
+    __regid__ = 'pyvallist'
     __select__ = match_kwargs('pyvalue')
 
     def call(self, pyvalue):
--- a/web/views/schema.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/schema.py	Wed Sep 23 09:29:39 2009 +0200
@@ -37,7 +37,7 @@
 # global schema view ###########################################################
 
 class SchemaView(tabs.TabsMixin, StartupView):
-    id = 'schema'
+    __regid__ = 'schema'
     title = _('instance schema')
     tabs = [_('schema-text'), _('schema-image')]
     default_tab = 'schema-text'
@@ -51,7 +51,7 @@
 
 
 class SchemaTabImageView(StartupView):
-    id = 'schema-image'
+    __regid__ = 'schema-image'
 
     def call(self):
         self.w(_(u'<div>This schema of the data model <em>excludes</em> the '
@@ -64,7 +64,7 @@
 
 
 class SchemaTabTextView(StartupView):
-    id = 'schema-text'
+    __regid__ = 'schema-text'
 
     def call(self):
         rset = self.req.execute('Any X ORDERBY N WHERE X is CWEType, X name N, '
@@ -73,7 +73,7 @@
 
 
 class ManagerSchemaPermissionsView(StartupView, management.SecurityViewMixIn):
-    id = 'schema-security'
+    __regid__ = 'schema-security'
     __select__ = StartupView.__select__ & match_user_groups('managers')
 
     def call(self, display_relations=True):
@@ -173,7 +173,7 @@
 
 
 class SchemaUreportsView(StartupView):
-    id = 'schema-block'
+    __regid__ = 'schema-block'
 
     def call(self):
         viewer = SchemaViewer(self.req)
@@ -224,7 +224,7 @@
 
 
 class CWETypeSTextView(EntityView):
-    id = 'cwetype-schema-text'
+    __regid__ = 'cwetype-schema-text'
     __select__ = EntityView.__select__ & implements('CWEType')
 
     def cell_call(self, row, col):
@@ -260,7 +260,7 @@
 
 
 class CWETypeSImageView(EntityView):
-    id = 'cwetype-schema-image'
+    __regid__ = 'cwetype-schema-image'
     __select__ = EntityView.__select__ & implements('CWEType')
 
     def cell_call(self, row, col):
@@ -272,7 +272,7 @@
 
 
 class CWETypeSPermView(EntityView):
-    id = 'cwetype-schema-permissions'
+    __regid__ = 'cwetype-schema-permissions'
     __select__ = EntityView.__select__ & implements('CWEType')
 
     def cell_call(self, row, col):
@@ -300,7 +300,7 @@
 
 
 class CWETypeSWorkflowView(EntityView):
-    id = 'cwetype-workflow'
+    __regid__ = 'cwetype-workflow'
     __select__ = (EntityView.__select__ & implements('CWEType') &
                   has_related_entities('workflow_of', 'object'))
 
@@ -372,7 +372,7 @@
 
 
 class SchemaImageView(TmpFileViewMixin, StartupView):
-    id = 'schemagraph'
+    __regid__ = 'schemagraph'
     content_type = 'image/png'
 
     def _generate(self, tmpfile):
@@ -384,7 +384,7 @@
 
 
 class CWETypeSchemaImageView(TmpFileViewMixin, EntityView):
-    id = 'schemagraph'
+    __regid__ = 'schemagraph'
     __select__ = implements('CWEType')
     content_type = 'image/png'
 
@@ -411,12 +411,12 @@
 # misc: facets, actions ########################################################
 
 class CWFinalFacet(facet.AttributeFacet):
-    id = 'cwfinal-facet'
+    __regid__ = 'cwfinal-facet'
     __select__ = facet.AttributeFacet.__select__ & implements('CWEType', 'CWRType')
     rtype = 'final'
 
 class ViewSchemaAction(action.Action):
-    id = 'schema'
+    __regid__ = 'schema'
     __select__ = yes()
 
     title = _("site schema")
--- a/web/views/sparql.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/sparql.py	Wed Sep 23 09:29:39 2009 +0200
@@ -23,7 +23,7 @@
     Sparql2rqlTranslator = None
 
 class SparqlForm(forms.FieldsForm):
-    id = 'sparql'
+    __regid__ = 'sparql'
     sparql = formfields.StringField(help=_('type here a sparql query'))
     resultvid = formfields.StringField(choices=((_('table'), 'table'),
                                                 (_('sparql xml'), 'sparqlxml')),
@@ -36,7 +36,7 @@
 
 
 class SparqlFormView(form.FormViewMixIn, StartupView):
-    id = 'sparql'
+    __regid__ = 'sparql'
     def call(self):
         form = self.vreg.select('forms', 'sparql', self.req)
         self.w(form.form_render())
@@ -81,7 +81,7 @@
 class SparqlResultXmlView(AnyRsetView):
     """The spec can be found here: http://www.w3.org/TR/rdf-sparql-XMLres/
     """
-    id = 'sparqlxml'
+    __regid__ = 'sparqlxml'
     content_type = 'application/sparql-results+xml'
     templatable = False
 
--- a/web/views/startup.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/startup.py	Wed Sep 23 09:29:39 2009 +0200
@@ -18,7 +18,7 @@
 from cubicweb.web import ajax_replace_url, uicfg, httpcache
 
 class ManageView(StartupView):
-    id = 'manage'
+    __regid__ = 'manage'
     title = _('manage')
     http_cache_manager = httpcache.EtagHTTPCacheManager
 
@@ -140,31 +140,9 @@
 
 
 class IndexView(ManageView):
-    id = 'index'
+    __regid__ = 'index'
     title = _('view_index')
 
     def display_folders(self):
         return 'Folder' in self.schema and self.req.execute('Any COUNT(X) WHERE X is Folder')[0][0]
 
-
-class RegistryView(StartupView):
-    id = 'registry'
-    title = _('registry')
-    __select__ = StartupView.__select__ & match_user_groups('managers')
-
-    def call(self, **kwargs):
-        """The default view representing the instance's management"""
-        self.w(u'<h1>%s</h1>' % _("Registry's content"))
-        keys = sorted(self.vreg)
-        self.w(u'<p>%s</p>\n' % ' - '.join('<a href="/_registry#%s">%s</a>' % (key, key) for key in keys))
-        for key in keys:
-            self.w(u'<h2><a name="%s">%s</a></h2>' % (key,key))
-            items = self.vreg[key].items()
-            if items:
-                self.w(u'<table><tbody>')
-                for key, value in sorted(items):
-                    self.w(u'<tr><td>%s</td><td>%s</td></tr>' % (key, xml_escape(repr(value))))
-                self.w(u'</tbody></table>\n')
-            else:
-                self.w(u'<p>Empty</p>\n')
-
--- a/web/views/tableview.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/tableview.py	Wed Sep 23 09:29:39 2009 +0200
@@ -22,7 +22,7 @@
 from cubicweb.web.facet import prepare_facets_rqlst, filter_hiddens
 
 class TableView(AnyRsetView):
-    id = 'table'
+    __regid__ = 'table'
     title = _('table')
     finalview = 'final'
 
@@ -247,16 +247,15 @@
 
 
 class EditableTableView(TableView):
-    id = 'editable-table'
+    __regid__ = 'editable-table'
     finalview = 'editable-final'
     title = _('editable-table')
 
 
 class CellView(EntityView):
+    __regid__ = 'cell'
     __select__ = nonempty_rset()
 
-    id = 'cell'
-
     def cell_call(self, row, col, cellvid=None):
         """
         :param row, col: indexes locating the cell value in view's result set
@@ -287,7 +286,7 @@
     * the actual query (`actualrql` form parameter) whose results will be
       displayed with default restrictions set
     """
-    id = 'initialtable'
+    __regid__ = 'initialtable'
     __select__ = nonempty_rset() & match_form_params('actualrql')
     # should not be displayed in possible view since it expects some specific
     # parameters
@@ -325,5 +324,5 @@
 
 
 class EditableInitialTableTableView(InitialTableView):
-    id = 'editable-initialtable'
+    __regid__ = 'editable-initialtable'
     finalview = 'editable-final'
--- a/web/views/timeline.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/timeline.py	Wed Sep 23 09:29:39 2009 +0200
@@ -24,7 +24,7 @@
     NOTE: work in progress (image_url, bubbleUrl and so on
     should be properties of entity classes or subviews)
     """
-    id = 'timeline-json'
+    __regid__ = 'timeline-json'
     binary = True
     templatable = False
     content_type = 'application/json'
@@ -102,7 +102,7 @@
 
 class TimelineView(TimelineViewMixIn, EntityView):
     """builds a cubicweb timeline widget node"""
-    id = 'timeline'
+    __regid__ = 'timeline'
     title = _('timeline')
     __select__ = implements(ICalendarable)
     need_navigation = False
@@ -117,7 +117,7 @@
     """similar to `TimelineView` but loads data from a static
     JSON file instead of one after a RQL query.
     """
-    id = 'static-timeline'
+    __regid__ = 'static-timeline'
 
     def call(self, loadurl, tlunit=None, wdgclass=None):
         self.widget_class = wdgclass or self.widget_class
--- a/web/views/timetable.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/timetable.py	Wed Sep 23 09:29:39 2009 +0200
@@ -24,7 +24,7 @@
 MIN_COLS = 3  # minimum number of task columns for a single user
 
 class TimeTableView(AnyRsetView):
-    id = 'timetable'
+    __regid__ = 'timetable'
     title = _('timetable')
     __select__ = implements(ITimetableViews)
     need_navigation = False
--- a/web/views/treeview.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/treeview.py	Wed Sep 23 09:29:39 2009 +0200
@@ -20,7 +20,7 @@
     return str('%s-treestate' % treeid)
 
 class TreeView(EntityView):
-    id = 'treeview'
+    __regid__ = 'treeview'
     itemvid = 'treeitemview'
     subvid = 'oneline'
     css_classes = 'treeview widget'
@@ -74,7 +74,7 @@
 class FileTreeView(TreeView):
     """specific version of the treeview to display file trees
     """
-    id = 'filetree'
+    __regid__ = 'filetree'
     css_classes = 'treeview widget filetree'
     title = _('file tree view')
 
@@ -88,7 +88,7 @@
     This view adds an enclosing <span> with some specific CSS classes
     around the oneline view. This is needed by the jquery treeview plugin.
     """
-    id = 'filetree-oneline'
+    __regid__ = 'filetree-oneline'
 
     def cell_call(self, row, col):
         entity = self.rset.get_entity(row, col)
@@ -101,7 +101,7 @@
 
 class DefaultTreeViewItemView(EntityView):
     """default treeitem view for entities which don't implement ITree"""
-    id = 'treeitemview'
+    __regid__ = 'treeitemview'
 
     def cell_call(self, row, col, vid='oneline', parentvid='treeview', treeid=None):
         assert treeid is not None
@@ -118,9 +118,9 @@
 
     (each item should be expandable if it's not a tree leaf)
     """
-    id = 'treeitemview'
+    __regid__ = 'treeitemview'
+    __select__ = EntityView.__select__ & implements(ITree)
     default_branch_state_is_open = False
-    __select__ = EntityView.__select__ & implements(ITree)
 
     def open_state(self, eeid, treeid):
         cookies = self.req.get_cookie()
--- a/web/views/urlpublishing.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/urlpublishing.py	Wed Sep 23 09:29:39 2009 +0200
@@ -49,7 +49,7 @@
     lower priority.  The first evaluator returning a result or raising
     something else than `PathDontMatch` will stop the handlers chain.
     """
-    id = 'urlpublisher'
+    __regid__ = 'urlpublisher'
     vreg = None # XXX necessary until property for deprecation warning is on appobject
 
     def __init__(self, vreg, default_method='view'):
@@ -101,7 +101,7 @@
 
 class URLPathEvaluator(component.Component):
     __abstract__ = True
-    id = 'urlpathevaluator'
+    __regid__ = 'urlpathevaluator'
     vreg = None # XXX necessary until property for deprecation warning is on appobject
 
     def __init__(self, urlpublisher):
--- a/web/views/urlrewrite.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/urlrewrite.py	Wed Sep 23 09:29:39 2009 +0200
@@ -67,7 +67,7 @@
 
     If the input uri is a regexp, group substitution is allowed
     """
-    id = 'simple'
+    __regid__ = 'simple'
 
     rules = [
         ('/_', dict(vid='manage')),
@@ -179,7 +179,7 @@
     """Here, the rules dict maps regexps or plain strings to
     callbacks that will be called with (input, uri, req, schema)
     """
-    id = 'schemabased'
+    __regid__ = 'schemabased'
     rules = [
         # rgxp : callback
         (rgx('/search/(.+)'), build_rset(rql=r'Any X WHERE X has_text %(text)s',
--- a/web/views/wdoc.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/wdoc.py	Wed Sep 23 09:29:39 2009 +0200
@@ -87,7 +87,7 @@
 
 class InlineHelpView(StartupView):
     __select__ = match_form_params('fid')
-    id = 'wdoc'
+    __regid__ = 'wdoc'
     title = _('site documentation')
 
     def call(self):
@@ -163,7 +163,7 @@
 
 
 class InlineHelpImageView(StartupView):
-    id = 'wdocimages'
+    __regid__ = 'wdocimages'
     __select__ = match_form_params('fid')
     binary = True
     templatable = False
@@ -183,7 +183,7 @@
 
 
 class ChangeLogView(StartupView):
-    id = 'changelog'
+    __regid__ = 'changelog'
     title = _('What\'s new?')
     maxentries = 25
 
--- a/web/views/workflow.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/workflow.py	Wed Sep 23 09:29:39 2009 +0200
@@ -42,7 +42,7 @@
 # IWorkflowable views #########################################################
 
 class ChangeStateForm(forms.CompositeEntityForm):
-    id = 'changestate'
+    __regid__ = 'changestate'
 
     form_renderer_id = 'base' # don't want EntityFormRenderer
     form_buttons = [fwdgs.SubmitButton(stdmsgs.YES),
@@ -50,7 +50,7 @@
 
 
 class ChangeStateFormView(form.FormViewMixIn, view.EntityView):
-    id = 'statuschange'
+    __regid__ = 'statuschange'
     title = _('status change')
     __select__ = (one_line_rset() & implements(IWorkflowable)
                   & match_form_params('treid'))
@@ -88,7 +88,7 @@
 
 
 class WFHistoryView(EntityView):
-    id = 'wfhistory'
+    __regid__ = 'wfhistory'
     __select__ = relation_possible('wf_info_for', role='object')
     title = _('Workflow history')
 
@@ -121,7 +121,7 @@
 
 class WFHistoryVComponent(component.EntityVComponent):
     """display the workflow history for entities supporting it"""
-    id = 'wfhistory'
+    __regid__ = 'wfhistory'
     __select__ = WFHistoryView.__select__ & component.EntityVComponent.__select__
     context = 'navcontentbottom'
     title = _('Workflow history')
@@ -134,7 +134,7 @@
 
 class WorkflowActions(action.Action):
     """fill 'workflow' sub-menu of the actions box"""
-    id = 'workflow'
+    __regid__ = 'workflow'
     __select__ = (action.Action.__select__ & one_line_rset() &
                   relation_possible('in_state'))
 
@@ -166,7 +166,7 @@
 # workflow entity types views ##################################################
 
 class CellView(view.EntityView):
-    id = 'cell'
+    __regid__ = 'cell'
     __select__ = implements('TrInfo')
 
     def cell_call(self, row, col, cellvid=None):
@@ -175,7 +175,7 @@
 
 class StateInContextView(view.EntityView):
     """convenience trick, State's incontext view should not be clickable"""
-    id = 'incontext'
+    __regid__ = 'incontext'
     __select__ = implements('State')
 
     def cell_call(self, row, col):
@@ -250,9 +250,9 @@
 
 
 class WorkflowImageView(TmpFileViewMixin, view.EntityView):
-    id = 'wfgraph'
+    __regid__ = 'wfgraph'
+    __select__ = implements('Workflow')
     content_type = 'image/png'
-    __select__ = implements('Workflow')
 
     def _generate(self, tmpfile):
         """display schema information for an entity"""
--- a/web/views/xbel.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/xbel.py	Wed Sep 23 09:29:39 2009 +0200
@@ -16,7 +16,7 @@
 
 
 class XbelView(XMLView):
-    id = 'xbel'
+    __regid__ = 'xbel'
     title = _('xbel')
     templatable = False
     content_type = 'text/xml' #application/xbel+xml
@@ -38,7 +38,7 @@
 
 
 class XbelItemView(EntityView):
-    id = 'xbelitem'
+    __regid__ = 'xbelitem'
 
     def cell_call(self, row, col):
         entity = self.complete_entity(row, col)
--- a/web/views/xmlrss.py	Wed Sep 23 08:42:52 2009 +0200
+++ b/web/views/xmlrss.py	Wed Sep 23 09:29:39 2009 +0200
@@ -22,7 +22,7 @@
 
 class XMLView(EntityView):
     """xml view for entities"""
-    id = 'xml'
+    __regid__ = 'xml'
     title = _('xml')
     templatable = False
     content_type = 'text/xml'
@@ -42,7 +42,7 @@
 
 
 class XMLItemView(EntityView):
-    id = 'xmlitem'
+    __regid__ = 'xmlitem'
 
     def cell_call(self, row, col):
         """ element as an item for an xml feed """
@@ -67,7 +67,7 @@
 
 class XMLRsetView(AnyRsetView):
     """dumps raw rset as xml"""
-    id = 'rsetxml'
+    __regid__ = 'rsetxml'
     title = _('xml export')
     templatable = False
     content_type = 'text/xml'
@@ -105,7 +105,7 @@
 # RSS stuff ###################################################################
 
 class RSSFeedURL(Component):
-    id = 'rss_feed_url'
+    __regid__ = 'rss_feed_url'
     __select__ = non_final_entity()
 
     def feed_url(self):
@@ -113,7 +113,7 @@
 
 
 class RSSEntityFeedURL(Component):
-    id = 'rss_feed_url'
+    __regid__ = 'rss_feed_url'
     __select__ = non_final_entity() & one_line_rset()
 
     def feed_url(self):
@@ -122,7 +122,7 @@
 
 class RSSIconBox(box.BoxTemplate):
     """just display the RSS icon on uniform result set"""
-    id = 'rss'
+    __regid__ = 'rss'
     __select__ = (box.BoxTemplate.__select__
                   & appobject_selectable('components', 'rss_feed_url'))
 
@@ -142,7 +142,7 @@
 
 
 class RSSView(XMLView):
-    id = 'rss'
+    __regid__ = 'rss'
     title = _('rss')
     templatable = False
     content_type = 'text/xml'
@@ -178,7 +178,7 @@
 
 
 class RSSItemView(EntityView):
-    id = 'rssitem'
+    __regid__ = 'rssitem'
     date_format = '%%Y-%%m-%%dT%%H:%%M%+03i:00' % (timezone / 3600)
     add_div_section = False