[entity api] unify set_attributes / set_relations into a cw_set method. Closes #2423719
Allowing similar usage as create_entity/cw_instantiate.
Update cw code base to remove deprecated calls.
# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr## This file is part of CubicWeb.## CubicWeb is free software: you can redistribute it and/or modify it under the# terms of the GNU Lesser General Public License as published by the Free# Software Foundation, either version 2.1 of the License, or (at your option)# any later version.## CubicWeb is distributed in the hope that it will be useful, but WITHOUT# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more# details.## You should have received a copy of the GNU Lesser General Public License along# with CubicWeb. If not, see <http://www.gnu.org/licenses/>."""mainly regression-preventing tests for reledit views"""fromcubicweb.devtools.testlibimportCubicWebTCfromcubicweb.web.uicfgimportreledit_ctrlclassReleditMixinTC(object):defsetup_database(self):self.req=self.request()self.proj=self.req.create_entity('Project',title=u'cubicweb-world-domination')self.tick=self.req.create_entity('Ticket',title=u'write the code')self.toto=self.req.create_entity('Personne',nom=u'Toto')classClickAndEditFormTC(ReleditMixinTC,CubicWebTC):deftest_default_config(self):reledit={'title':'''<div id="title-subject-%(eid)s-reledit" onmouseout="jQuery('#title-subject-%(eid)s').addClass('hidden')" onmouseover="jQuery('#title-subject-%(eid)s').removeClass('hidden')" class="releditField"><div id="title-subject-%(eid)s-value" class="editableFieldValue">cubicweb-world-domination</div><div id="title-subject-%(eid)s" class="editableField hidden"><div id="title-subject-%(eid)s-update" class="editableField" onclick="cw.reledit.loadInlineEditionForm('base', %(eid)s, 'title', 'subject', 'title-subject-%(eid)s', false, '', 'edit_rtype');" title="click to edit this field"><img title="click to edit this field" src="http://testing.fr/cubicweb/data/pen_icon.png" alt="click to edit this field"/></div></div></div>''','long_desc':'''<div id="long_desc-subject-%(eid)s-reledit" onmouseout="jQuery('#long_desc-subject-%(eid)s').addClass('hidden')" onmouseover="jQuery('#long_desc-subject-%(eid)s').removeClass('hidden')" class="releditField"><div id="long_desc-subject-%(eid)s-value" class="editableFieldValue"><not specified></div><div id="long_desc-subject-%(eid)s" class="editableField hidden"><div id="long_desc-subject-%(eid)s-add" class="editableField" onclick="cw.reledit.loadInlineEditionForm('edition', %(eid)s, 'long_desc', 'subject', 'long_desc-subject-%(eid)s', false, 'autolimited', 'add');" title="click to add a value"><img title="click to add a value" src="http://testing.fr/cubicweb/data/plus.png" alt="click to add a value"/></div></div></div>''','manager':'''<div id="manager-subject-%(eid)s-reledit" onmouseout="jQuery('#manager-subject-%(eid)s').addClass('hidden')" onmouseover="jQuery('#manager-subject-%(eid)s').removeClass('hidden')" class="releditField"><div id="manager-subject-%(eid)s-value" class="editableFieldValue"><not specified></div><div id="manager-subject-%(eid)s" class="editableField hidden"><div id="manager-subject-%(eid)s-update" class="editableField" onclick="cw.reledit.loadInlineEditionForm('base', %(eid)s, 'manager', 'subject', 'manager-subject-%(eid)s', false, 'autolimited', 'edit_rtype');" title="click to edit this field"><img title="click to edit this field" src="http://testing.fr/cubicweb/data/pen_icon.png" alt="click to edit this field"/></div></div></div>''','composite_card11_2ttypes':"""<not specified>""",'concerns':"""<not specified>"""}forrschema,ttypes,roleinself.proj.e_schema.relation_definitions(includefinal=True):ifrschemanotinreledit:continuertype=rschema.typeself.assertMultiLineEqual(reledit[rtype]%{'eid':self.proj.eid},self.proj.view('reledit',rtype=rtype,role=role),rtype)deftest_default_forms(self):self.skipTest('Need to check if this test should still run post reledit/doreledit merge')doreledit={'title':"""<div id="title-subject-%(eid)s-reledit" onmouseout="jQuery('#title-subject-%(eid)s').addClass('hidden')" onmouseover="jQuery('#title-subject-%(eid)s').removeClass('hidden')" class="releditField"><div id="title-subject-%(eid)s-value" class="editableFieldValue">cubicweb-world-domination</div><form action="http://testing.fr/cubicweb/validateform?__onsuccess=window.parent.cw.reledit.onSuccess" method="post" enctype="application/x-www-form-urlencoded" id="title-subject-%(eid)s-form" onsubmit="return freezeFormButtons('title-subject-%(eid)s-form');" class="releditForm" cubicweb:target="eformframe"><fieldset><input name="__form_id" type="hidden" value="base" /><input name="__errorurl" type="hidden" value="http://testing.fr/cubicweb/view?rql=Blop&vid=blop#title-subject-%(eid)s-form" /><input name="__domid" type="hidden" value="title-subject-%(eid)s-form" /><input name="__type:%(eid)s" type="hidden" value="Project" /><input name="eid" type="hidden" value="%(eid)s" /><input name="__maineid" type="hidden" value="%(eid)s" /><input name="__reledit|vid" type="hidden" value="" /><input name="__reledit|rtype" type="hidden" value="title" /><input name="__reledit|divid" type="hidden" value="title-subject-%(eid)s" /><input name="__reledit|formid" type="hidden" value="base" /><input name="__reledit|reload" type="hidden" value="false" /><input name="__reledit|role" type="hidden" value="subject" /><input name="__reledit|eid" type="hidden" value="%(eid)s" /><input name="_cw_entity_fields:%(eid)s" type="hidden" value="title-subject,__type" /><fieldset class="default"><table class=""><tr class="title_subject_row"><td><input id="title-subject:%(eid)s" maxlength="32" name="title-subject:%(eid)s" size="32" tabindex="1" type="text" value="cubicweb-world-domination" /></td></tr></table></fieldset><table class="buttonbar"><tr><td><button class="validateButton" tabindex="2" type="submit" value="button_ok"><img alt="OK_ICON" src="http://testing.fr/cubicweb/data/ok.png" />button_ok</button></td><td><button class="validateButton" onclick="cw.reledit.cleanupAfterCancel('title-subject-%(eid)s')" tabindex="3" type="button" value="button_cancel"><img alt="CANCEL_ICON" src="http://testing.fr/cubicweb/data/cancel.png" />button_cancel</button></td></tr></table></fieldset></form><div id="title-subject-%(eid)s" class="editableField hidden"><div id="title-subject-%(eid)s-update" class="editableField" onclick="cw.reledit.loadInlineEditionForm('base', %(eid)s, 'title', 'subject', 'title-subject-%(eid)s', false, '');" title="click to edit this field"><img title="click to edit this field" src="http://testing.fr/cubicweb/data/pen_icon.png" alt="click to edit this field"/></div></div></div>""",'long_desc':"""<div id="long_desc-subject-%(eid)s-reledit" onmouseout="jQuery('#long_desc-subject-%(eid)s').addClass('hidden')" onmouseover="jQuery('#long_desc-subject-%(eid)s').removeClass('hidden')" class="releditField"><div id="long_desc-subject-%(eid)s-value" class="editableFieldValue"><not specified></div><form action="http://testing.fr/cubicweb/validateform?__onsuccess=window.parent.cw.reledit.onSuccess" method="post" enctype="application/x-www-form-urlencoded" id="long_desc-subject-%(eid)s-form" onsubmit="return freezeFormButtons('long_desc-subject-%(eid)s-form');" class="releditForm" cubicweb:target="eformframe"><fieldset><input name="__form_id" type="hidden" value="edition" /><input name="__errorurl" type="hidden" value="http://testing.fr/cubicweb/view?rql=Blop&vid=blop#long_desc-subject-%(eid)s-form" /><input name="__domid" type="hidden" value="long_desc-subject-%(eid)s-form" /><input name="__type:A" type="hidden" value="Blog" /><input name="eid" type="hidden" value="A" /><input name="__maineid" type="hidden" value="A" /><input name="__linkto" type="hidden" value="long_desc:%(eid)s:object" /><input name="__message" type="hidden" value="entity linked" /><input name="__reledit|vid" type="hidden" value="autolimited" /><input name="__reledit|rtype" type="hidden" value="long_desc" /><input name="__reledit|divid" type="hidden" value="long_desc-subject-%(eid)s" /><input name="__reledit|formid" type="hidden" value="edition" /><input name="__reledit|reload" type="hidden" value="false" /><input name="__reledit|role" type="hidden" value="subject" /><input name="__reledit|eid" type="hidden" value="%(eid)s" /><input name="_cw_entity_fields:A" type="hidden" value="title-subject,rss_url-subject,__type,description-subject" /><fieldset class="default"><table class="attributeForm"><tr class="title_subject_row"><th class="labelCol"><label class="required" for="title-subject:A">title</label></th><td><input id="title-subject:A" maxlength="50" name="title-subject:A" size="45" tabindex="4" type="text" value="" /></td></tr><tr class="description_subject_row"><th class="labelCol"><label for="description-subject:A">description</label></th><td><input name="description_format-subject:A" type="hidden" value="text/html" /><textarea cols="80" cubicweb:type="wysiwyg" id="description-subject:A" name="description-subject:A" onkeyup="autogrow(this)" rows="2" tabindex="5"></textarea></td></tr><tr class="rss_url_subject_row"><th class="labelCol"><label for="rss_url-subject:A">rss_url</label></th><td><input id="rss_url-subject:A" maxlength="128" name="rss_url-subject:A" size="45" tabindex="6" type="text" value="" /></td></tr></table></fieldset><table class="buttonbar"><tr><td><button class="validateButton" tabindex="7" type="submit" value="button_ok"><img alt="OK_ICON" src="http://testing.fr/cubicweb/data/ok.png" />button_ok</button></td><td><button class="validateButton" onclick="cw.reledit.cleanupAfterCancel('long_desc-subject-%(eid)s')" tabindex="8" type="button" value="button_cancel"><img alt="CANCEL_ICON" src="http://testing.fr/cubicweb/data/cancel.png" />button_cancel</button></td></tr></table></fieldset></form><div id="long_desc-subject-%(eid)s" class="editableField hidden"><div id="long_desc-subject-%(eid)s-add" class="editableField" onclick="cw.reledit.loadInlineEditionForm('edition', %(eid)s, 'long_desc', 'subject', 'long_desc-subject-%(eid)s', false, 'autolimited');" title="click to add a value"><img title="click to add a value" src="http://testing.fr/cubicweb/data/plus.png" alt="click to add a value"/></div></div></div>""",'manager':"""<div id="manager-subject-%(eid)s-reledit" onmouseout="jQuery('#manager-subject-%(eid)s').addClass('hidden')" onmouseover="jQuery('#manager-subject-%(eid)s').removeClass('hidden')" class="releditField"><div id="manager-subject-%(eid)s-value" class="editableFieldValue"><not specified></div><form action="http://testing.fr/cubicweb/validateform?__onsuccess=window.parent.cw.reledit.onSuccess" method="post" enctype="application/x-www-form-urlencoded" id="manager-subject-%(eid)s-form" onsubmit="return freezeFormButtons('manager-subject-%(eid)s-form');" class="releditForm" cubicweb:target="eformframe"><fieldset><input name="__form_id" type="hidden" value="base" /><input name="__errorurl" type="hidden" value="http://testing.fr/cubicweb/view?rql=Blop&vid=blop#manager-subject-%(eid)s-form" /><input name="__domid" type="hidden" value="manager-subject-%(eid)s-form" /><input name="__type:%(eid)s" type="hidden" value="Project" /><input name="eid" type="hidden" value="%(eid)s" /><input name="__maineid" type="hidden" value="%(eid)s" /><input name="__linkto" type="hidden" value="long_desc:%(eid)s:object" /><input name="__message" type="hidden" value="entity linked" /><input name="__reledit|vid" type="hidden" value="autolimited" /><input name="__reledit|rtype" type="hidden" value="manager" /><input name="__reledit|divid" type="hidden" value="manager-subject-%(eid)s" /><input name="__reledit|formid" type="hidden" value="base" /><input name="__reledit|reload" type="hidden" value="false" /><input name="__reledit|role" type="hidden" value="subject" /><input name="__reledit|eid" type="hidden" value="%(eid)s" /><input name="_cw_entity_fields:%(eid)s" type="hidden" value="manager-subject,__type" /><fieldset class="default"><table class=""><tr class="manager_subject_row"><td><select id="manager-subject:%(eid)s" name="manager-subject:%(eid)s" size="1" tabindex="9"><option value="__cubicweb_internal_field__"></option><option value="%(toto)s">Toto</option></select></td></tr></table></fieldset><table class="buttonbar"><tr><td><button class="validateButton" tabindex="10" type="submit" value="button_ok"><img alt="OK_ICON" src="http://testing.fr/cubicweb/data/ok.png" />button_ok</button></td><td><button class="validateButton" onclick="cw.reledit.cleanupAfterCancel('manager-subject-%(eid)s')" tabindex="11" type="button" value="button_cancel"><img alt="CANCEL_ICON" src="http://testing.fr/cubicweb/data/cancel.png" />button_cancel</button></td></tr></table></fieldset></form><div id="manager-subject-%(eid)s" class="editableField hidden"><div id="manager-subject-%(eid)s-update" class="editableField" onclick="cw.reledit.loadInlineEditionForm('base', %(eid)s, 'manager', 'subject', 'manager-subject-%(eid)s', false, 'autolimited');" title="click to edit this field"><img title="click to edit this field" src="http://testing.fr/cubicweb/data/pen_icon.png" alt="click to edit this field"/></div></div></div>""",'composite_card11_2ttypes':"""<not specified>""",'concerns':"""<not specified>"""}forrschema,ttypes,roleinself.proj.e_schema.relation_definitions(includefinal=True):ifrschemanotindoreledit:continuertype=rschema.typeself.assertMultiLineEqual(doreledit[rtype]%{'eid':self.proj.eid,'toto':self.toto.eid},self.proj.view('doreledit',rtype=rtype,role=role,formid='edition'ifrtype=='long_desc'else'base'),rtype)classClickAndEditFormUICFGTC(ReleditMixinTC,CubicWebTC):defsetup_database(self):super(ClickAndEditFormUICFGTC,self).setup_database()self.tick.cw_set(concerns=self.proj)self.proj.cw_set(manager=self.toto)deftest_with_uicfg(self):old_rctl=reledit_ctrl._tagdefs.copy()reledit_ctrl.tag_attribute(('Project','title'),{'novalue_label':'<title is required>','reload':True})reledit_ctrl.tag_subject_of(('Project','long_desc','*'),{'reload':True,'edit_target':'rtype','novalue_label':u'<long_desc is required>'})reledit_ctrl.tag_subject_of(('Project','manager','*'),{'edit_target':'related'})reledit_ctrl.tag_subject_of(('Project','composite_card11_2ttypes','*'),{'edit_target':'related'})reledit_ctrl.tag_object_of(('Ticket','concerns','Project'),{'edit_target':'rtype'})reledit={'title':"""<div id="title-subject-%(eid)s-reledit" onmouseout="jQuery('#title-subject-%(eid)s').addClass('hidden')" onmouseover="jQuery('#title-subject-%(eid)s').removeClass('hidden')" class="releditField"><div id="title-subject-%(eid)s-value" class="editableFieldValue">cubicweb-world-domination</div><div id="title-subject-%(eid)s" class="editableField hidden"><div id="title-subject-%(eid)s-update" class="editableField" onclick="cw.reledit.loadInlineEditionForm('base', %(eid)s, 'title', 'subject', 'title-subject-%(eid)s', true, '', 'edit_rtype');" title="click to edit this field"><img title="click to edit this field" src="http://testing.fr/cubicweb/data/pen_icon.png" alt="click to edit this field"/></div></div></div>""",'long_desc':"""<div id="long_desc-subject-%(eid)s-reledit" onmouseout="jQuery('#long_desc-subject-%(eid)s').addClass('hidden')" onmouseover="jQuery('#long_desc-subject-%(eid)s').removeClass('hidden')" class="releditField"><div id="long_desc-subject-%(eid)s-value" class="editableFieldValue"><long_desc is required></div><div id="long_desc-subject-%(eid)s" class="editableField hidden"><div id="long_desc-subject-%(eid)s-update" class="editableField" onclick="cw.reledit.loadInlineEditionForm('base', %(eid)s, 'long_desc', 'subject', 'long_desc-subject-%(eid)s', true, 'autolimited', 'edit_rtype');" title="click to edit this field"><img title="click to edit this field" src="http://testing.fr/cubicweb/data/pen_icon.png" alt="click to edit this field"/></div></div></div>""",'manager':"""<div id="manager-subject-%(eid)s-reledit" onmouseout="jQuery('#manager-subject-%(eid)s').addClass('hidden')" onmouseover="jQuery('#manager-subject-%(eid)s').removeClass('hidden')" class="releditField"><div id="manager-subject-%(eid)s-value" class="editableFieldValue"><a href="http://testing.fr/cubicweb/personne/%(toto)s" title="">Toto</a></div><div id="manager-subject-%(eid)s" class="editableField hidden"><div id="manager-subject-%(eid)s-update" class="editableField" onclick="cw.reledit.loadInlineEditionForm('edition', %(eid)s, 'manager', 'subject', 'manager-subject-%(eid)s', false, 'autolimited', 'edit_related');" title="click to edit this field"><img title="click to edit this field" src="http://testing.fr/cubicweb/data/pen_icon.png" alt="click to edit this field"/></div><div id="manager-subject-%(eid)s-delete" class="editableField" onclick="cw.reledit.loadInlineEditionForm('deleteconf', %(eid)s, 'manager', 'subject', 'manager-subject-%(eid)s', false, 'autolimited', 'delete');" title="click to delete this value"><img title="click to delete this value" src="http://testing.fr/cubicweb/data/cancel.png" alt="click to delete this value"/></div></div></div>""",'composite_card11_2ttypes':"""<not specified>""",'concerns':"""<div id="concerns-object-%(eid)s-reledit" onmouseout="jQuery('#concerns-object-%(eid)s').addClass('hidden')" onmouseover="jQuery('#concerns-object-%(eid)s').removeClass('hidden')" class="releditField"><div id="concerns-object-%(eid)s-value" class="editableFieldValue"><a href="http://testing.fr/cubicweb/ticket/%(tick)s" title="">write the code</a></div><div id="concerns-object-%(eid)s" class="editableField hidden"><div id="concerns-object-%(eid)s-update" class="editableField" onclick="cw.reledit.loadInlineEditionForm('base', %(eid)s, 'concerns', 'object', 'concerns-object-%(eid)s', false, 'autolimited', 'edit_rtype');" title="click to edit this field"><img title="click to edit this field" src="http://testing.fr/cubicweb/data/pen_icon.png" alt="click to edit this field"/></div></div></div>"""}forrschema,ttypes,roleinself.proj.e_schema.relation_definitions(includefinal=True):ifrschemanotinreledit:continuertype=rschema.typeself.assertMultiLineEqual(reledit[rtype]%{'eid':self.proj.eid,'toto':self.toto.eid,'tick':self.tick.eid},self.proj.view('reledit',rtype=rtype,role=role),rtype)reledit_ctrl.clear()reledit_ctrl._tagdefs.update(old_rctl)if__name__=='__main__':fromlogilab.common.testlibimportunittest_mainunittest_main()