# HG changeset patch # User Sylvain Thénault # Date 1253690979 -7200 # Node ID dd9d292b6a6d6da5cde41fa4cab20a64ffe30886 # Parent f5c69485381fc6bac4b73ad0f30fb7760119f8ab use __regid__ instead of id on appobject classes diff -r f5c69485381f -r dd9d292b6a6d entities/__init__.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',) diff -r f5c69485381f -r dd9d292b6a6d entities/authobjs.py --- 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 diff -r f5c69485381f -r dd9d292b6a6d entities/lib.py --- 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): diff -r f5c69485381f -r dd9d292b6a6d entities/schemaobjs.py --- 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): diff -r f5c69485381f -r dd9d292b6a6d entities/wfobjs.py --- 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 diff -r f5c69485381f -r dd9d292b6a6d sobjects/notification.py --- 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 = """ diff -r f5c69485381f -r dd9d292b6a6d sobjects/supervising.py --- 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'] diff -r f5c69485381f -r dd9d292b6a6d web/views/actions.py --- 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 diff -r f5c69485381f -r dd9d292b6a6d web/views/ajaxedit.py --- 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 diff -r f5c69485381f -r dd9d292b6a6d web/views/basecomponents.py --- 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' ' @@ -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'') class PdfViewComponent(component.Component): - id = 'pdfview' + __regid__ = 'pdfview' __select__ = yes() context = 'header' diff -r f5c69485381f -r dd9d292b6a6d web/views/basecontrollers.py --- 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): diff -r f5c69485381f -r dd9d292b6a6d web/views/basetemplates.py --- 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' diff -r f5c69485381f -r dd9d292b6a6d web/views/baseviews.py --- 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'
%s
\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 years') _('%d 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) diff -r f5c69485381f -r dd9d292b6a6d web/views/boxes.py --- 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 view""" diff -r f5c69485381f -r dd9d292b6a6d web/views/calendar.py --- 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('
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') diff -r f5c69485381f -r dd9d292b6a6d web/views/csvexport.py --- 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): diff -r f5c69485381f -r dd9d292b6a6d web/views/cwproperties.py --- 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 = '
' diff -r f5c69485381f -r dd9d292b6a6d web/views/cwuser.py --- 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') diff -r f5c69485381f -r dd9d292b6a6d web/views/debug.py --- 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'') else: w(u'

no web sessions found

') + + +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'

%s

' % _("Registry's content")) + keys = sorted(self.vreg) + self.w(u'

%s

\n' % ' - '.join('%s' + % (key, key) for key in keys)) + for key in keys: + self.w(u'

%s

' % (key,key)) + items = self.vreg[key].items() + if items: + self.w(u'') + for key, value in sorted(items): + self.w(u'' + % (key, xml_escape(repr(value)))) + self.w(u'
%s%s
\n') + else: + self.w(u'

Empty

\n') diff -r f5c69485381f -r dd9d292b6a6d web/views/editcontroller.py --- 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""" diff -r f5c69485381f -r dd9d292b6a6d web/views/editforms.py --- 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')" diff -r f5c69485381f -r dd9d292b6a6d web/views/editviews.py --- 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) diff -r f5c69485381f -r dd9d292b6a6d web/views/emailaddress.py --- 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): diff -r f5c69485381f -r dd9d292b6a6d web/views/embedding.py --- 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)) diff -r f5c69485381f -r dd9d292b6a6d web/views/error.py --- 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._ diff -r f5c69485381f -r dd9d292b6a6d web/views/facets.py --- 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 diff -r f5c69485381f -r dd9d292b6a6d web/views/formrenderers.py --- 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() diff -r f5c69485381f -r dd9d292b6a6d web/views/forms.py --- 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): diff -r f5c69485381f -r dd9d292b6a6d web/views/ibreadcrumbs.py --- 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) diff -r f5c69485381f -r dd9d292b6a6d web/views/idownloadable.py --- 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') diff -r f5c69485381f -r dd9d292b6a6d web/views/igeocodable.py --- 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'
    ') diff -r f5c69485381f -r dd9d292b6a6d web/views/iprogress.py --- 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) diff -r f5c69485381f -r dd9d292b6a6d web/views/isioc.py --- 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' diff -r f5c69485381f -r dd9d292b6a6d web/views/magicsearch.py --- 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) diff -r f5c69485381f -r dd9d292b6a6d web/views/management.py --- 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') diff -r f5c69485381f -r dd9d292b6a6d web/views/massmailing.py --- 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): diff -r f5c69485381f -r dd9d292b6a6d web/views/navigation.py --- 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') diff -r f5c69485381f -r dd9d292b6a6d web/views/old_calendar.py --- 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): diff -r f5c69485381f -r dd9d292b6a6d web/views/owl.py --- 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' diff -r f5c69485381f -r dd9d292b6a6d web/views/primary.py --- 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') diff -r f5c69485381f -r dd9d292b6a6d web/views/pyviews.py --- 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): diff -r f5c69485381f -r dd9d292b6a6d web/views/schema.py --- 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'
    This schema of the data model excludes 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") diff -r f5c69485381f -r dd9d292b6a6d web/views/sparql.py --- 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 diff -r f5c69485381f -r dd9d292b6a6d web/views/startup.py --- 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'

    %s

    ' % _("Registry's content")) - keys = sorted(self.vreg) - self.w(u'

    %s

    \n' % ' - '.join('%s' % (key, key) for key in keys)) - for key in keys: - self.w(u'

    %s

    ' % (key,key)) - items = self.vreg[key].items() - if items: - self.w(u'') - for key, value in sorted(items): - self.w(u'' % (key, xml_escape(repr(value)))) - self.w(u'
    %s%s
    \n') - else: - self.w(u'

    Empty

    \n') - diff -r f5c69485381f -r dd9d292b6a6d web/views/tableview.py --- 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' diff -r f5c69485381f -r dd9d292b6a6d web/views/timeline.py --- 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 diff -r f5c69485381f -r dd9d292b6a6d web/views/timetable.py --- 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 diff -r f5c69485381f -r dd9d292b6a6d web/views/treeview.py --- 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 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() diff -r f5c69485381f -r dd9d292b6a6d web/views/urlpublishing.py --- 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): diff -r f5c69485381f -r dd9d292b6a6d web/views/urlrewrite.py --- 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', diff -r f5c69485381f -r dd9d292b6a6d web/views/wdoc.py --- 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 diff -r f5c69485381f -r dd9d292b6a6d web/views/workflow.py --- 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""" diff -r f5c69485381f -r dd9d292b6a6d web/views/xbel.py --- 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) diff -r f5c69485381f -r dd9d292b6a6d web/views/xmlrss.py --- 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