--- a/devtools/apptest.py Thu Jul 02 17:13:52 2009 +0200
+++ b/devtools/apptest.py Fri Jul 03 10:27:13 2009 +0200
@@ -462,14 +462,13 @@
self.__close = repo.close
self.cnxid = self.cnx.sessionid
self.session = repo._sessions[self.cnxid]
- # XXX copy schema since hooks may alter it and it may be not fully
- # cleaned (missing some schema synchronization support)
- try:
- origschema = repo.__schema
- except AttributeError:
- origschema = repo.schema
- repo.__schema = origschema
if self.copy_schema:
+ # XXX copy schema since hooks may alter it and it may be not fully
+ # cleaned (missing some schema synchronization support)
+ try:
+ origschema = repo.__schema
+ except AttributeError:
+ repo.__schema = origschema = repo.schema
repo.schema = deepcopy(origschema)
repo.set_schema(repo.schema) # reset hooks
repo.vreg.update_schema(repo.schema)
--- a/schema.py Thu Jul 02 17:13:52 2009 +0200
+++ b/schema.py Fri Jul 03 10:27:13 2009 +0200
@@ -356,6 +356,7 @@
"""rql expression factory"""
return ERQLExpression(expression, mainvars, eid)
+
class CubicWebRelationSchema(RelationSchema):
RelationSchema._RPROPERTIES['eid'] = None
_perms_checked = False
--- a/server/checkintegrity.py Thu Jul 02 17:13:52 2009 +0200
+++ b/server/checkintegrity.py Fri Jul 03 10:27:13 2009 +0200
@@ -71,6 +71,14 @@
uniquecstrcheck_before_modification)
from cubicweb.server.repository import FTIndexEntityOp
repo = session.repo
+ cursor = session.pool['system']
+ if not repo.system_source.indexer.has_fti_table(cursor):
+ from indexer import get_indexer
+ print 'no text index table'
+ indexer = get_indexer(repo.system_source.dbdriver)
+ # XXX indexer.init_fti(cursor) once index 0.7 is out
+ indexer.init_extensions(cursor)
+ cursor.execute(indexer.sql_init_fti())
repo.hm.unregister_hook(setmtime_before_update_entity,
'before_update_entity', '')
repo.hm.unregister_hook(uniquecstrcheck_before_modification,
--- a/server/schemahooks.py Thu Jul 02 17:13:52 2009 +0200
+++ b/server/schemahooks.py Fri Jul 03 10:27:13 2009 +0200
@@ -247,8 +247,7 @@
"""actually add the entity type to the application's schema"""
eid = None # make pylint happy
def commit_event(self):
- eschema = self.schema.add_entity_type(self.kobj)
- eschema.eid = self.eid
+ self.schema.add_entity_type(self.kobj)
def before_add_eetype(session, entity):
"""before adding a CWEType entity:
@@ -299,7 +298,8 @@
# register operation to modify the schema on commit
# this have to be done before adding other relations definitions
# or permission settings
- AddCWETypeOp(session, etype, eid=entity.eid)
+ etype.eid = entity.eid
+ AddCWETypeOp(session, etype)
# add meta creation_date, modification_date and owned_by relations
for rql, kwargs in relrqls:
session.execute(rql, kwargs)
@@ -311,7 +311,6 @@
def commit_event(self):
rschema = self.schema.add_relation_type(self.kobj)
rschema.set_default_groups()
- rschema.eid = self.eid
def before_add_ertype(session, entity):
"""before adding a CWRType entity:
@@ -331,12 +330,13 @@
schema on commit
We don't know yeat this point if a table is necessary
"""
- AddCWRTypeOp(session, RelationType(name=entity['name'],
- description=entity.get('description'),
- meta=entity.get('meta', False),
- inlined=entity.get('inlined', False),
- symetric=entity.get('symetric', False)),
- eid=entity.eid)
+ rtype = RelationType(name=entity['name'],
+ description=entity.get('description'),
+ meta=entity.get('meta', False),
+ inlined=entity.get('inlined', False),
+ symetric=entity.get('symetric', False))
+ rtype.eid = entity.eid
+ AddCWRTypeOp(session, rtype)
class AddErdefOp(EarlySchemaOperation):
--- a/server/test/unittest_hooks.py Thu Jul 02 17:13:52 2009 +0200
+++ b/server/test/unittest_hooks.py Fri Jul 03 10:27:13 2009 +0200
@@ -242,7 +242,7 @@
class SchemaModificationHooksTC(RepositoryBasedTC):
- copy_schema = True
+ #copy_schema = True
def setUp(self):
if not hasattr(self, '_repo'):
@@ -471,6 +471,10 @@
self.commit()
# should not be able anymore to add personne without prenom
self.assertRaises(ValidationError, self.execute, 'INSERT Personne X: X nom "toto"')
+ self.execute('SET DEF cardinality "?1" '
+ 'WHERE DEF relation_type RT, DEF from_entity E,'
+ 'RT name "prenom", E name "Personne"')
+ self.commit()
class WorkflowHooksTC(RepositoryBasedTC):
--- a/server/test/unittest_migractions.py Thu Jul 02 17:13:52 2009 +0200
+++ b/server/test/unittest_migractions.py Fri Jul 03 10:27:13 2009 +0200
@@ -23,7 +23,7 @@
class MigrationCommandsTC(RepositoryBasedTC):
- copy_schema = True
+ copy_schema = False
def setUp(self):
if not hasattr(self, '_repo'):
@@ -146,7 +146,7 @@
for cstr in eschema.constraints('name'):
self.failUnless(hasattr(cstr, 'eid'))
- def test_drop_entity_type(self):
+ def test_add_drop_entity_type(self):
self.mh.cmd_add_entity_type('Folder2')
todoeid = self.mh.cmd_add_state(u'todo', 'Folder2', initial=True)
doneeid = self.mh.cmd_add_state(u'done', 'Folder2')
@@ -161,7 +161,7 @@
self.failIf(self.execute('State X WHERE NOT X state_of ET'))
self.failIf(self.execute('Transition X WHERE NOT X transition_of ET'))
- def test_add_relation_type(self):
+ def test_add_drop_relation_type(self):
self.mh.cmd_add_entity_type('Folder2', auto=False)
self.mh.cmd_add_relation_type('filed_under2')
self.failUnless('filed_under2' in self.schema)
@@ -169,52 +169,40 @@
['Affaire', 'Card', 'Division', 'Email', 'EmailThread', 'File',
'Folder2', 'Image', 'Note', 'Personne', 'Societe', 'SubDivision'])
self.assertEquals(self.schema['filed_under2'].objects(), ('Folder2',))
-
-
- def test_drop_relation_type(self):
- self.mh.cmd_add_entity_type('Folder2', auto=False)
- self.mh.cmd_add_relation_type('filed_under2')
- self.failUnless('filed_under2' in self.schema)
self.mh.cmd_drop_relation_type('filed_under2')
self.failIf('filed_under2' in self.schema)
- def test_add_relation_definition(self):
- self.mh.cmd_add_relation_definition('Societe', 'in_state', 'State')
- self.assertEquals(sorted(str(x) for x in self.schema['in_state'].subjects()),
- ['Affaire', 'CWUser', 'Division', 'Note', 'Societe', 'SubDivision'])
- self.assertEquals(self.schema['in_state'].objects(), ('State',))
-
def test_add_relation_definition_nortype(self):
self.mh.cmd_add_relation_definition('Personne', 'concerne2', 'Affaire')
self.assertEquals(self.schema['concerne2'].subjects(),
('Personne',))
self.assertEquals(self.schema['concerne2'].objects(), ('Affaire',))
+ self.mh.cmd_drop_relation_definition('Personne', 'concerne2', 'Affaire')
+ self.failIf('concerne2' in self.schema)
- def test_drop_relation_definition1(self):
- self.failUnless('concerne' in self.schema)
+ def test_drop_relation_definition_existant_rtype(self):
self.assertEquals(sorted(str(e) for e in self.schema['concerne'].subjects()), ['Affaire', 'Personne'])
self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
self.mh.cmd_drop_relation_definition('Personne', 'concerne', 'Affaire')
self.assertEquals(sorted(str(e) for e in self.schema['concerne'].subjects()), ['Affaire'])
self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), ['Division', 'Note', 'Societe', 'SubDivision'])
+ self.mh.cmd_add_relation_definition('Personne', 'concerne', 'Affaire')
+ self.assertEquals(sorted(str(e) for e in self.schema['concerne'].subjects()), ['Affaire', 'Personne'])
+ self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
+ # trick: overwrite self.maxeid to avoid deletion of just reintroduced types
+ self.maxeid = self.execute('Any MAX(X)')[0][0]
def test_drop_relation_definition_with_specialization(self):
- self.failUnless('concerne' in self.schema)
self.assertEquals(sorted(str(e) for e in self.schema['concerne'].subjects()), ['Affaire', 'Personne'])
self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
self.mh.cmd_drop_relation_definition('Affaire', 'concerne', 'Societe')
- self.mh.cmd_drop_relation_definition('None', 'concerne', 'Societe')
self.assertEquals(sorted(str(e) for e in self.schema['concerne'].subjects()), ['Affaire', 'Personne'])
self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), ['Affaire', 'Note'])
-
- def test_drop_relation_definition2(self):
- self.failUnless('evaluee' in self.schema)
- self.mh.cmd_drop_relation_definition('Personne', 'evaluee', 'Note')
- self.failUnless('evaluee' in self.schema)
- self.assertEquals(sorted(self.schema['evaluee'].subjects()),
- ['CWUser', 'Division', 'Societe', 'SubDivision'])
- self.assertEquals(sorted(self.schema['evaluee'].objects()),
- ['Note'])
+ self.mh.cmd_add_relation_definition('Affaire', 'concerne', 'Societe')
+ self.assertEquals(sorted(str(e) for e in self.schema['concerne'].subjects()), ['Affaire', 'Personne'])
+ self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
+ # trick: overwrite self.maxeid to avoid deletion of just reintroduced types
+ self.maxeid = self.execute('Any MAX(X)')[0][0]
def test_rename_relation(self):
self.skip('implement me')
@@ -455,7 +443,6 @@
ex = self.assertRaises(ConfigurationError, self.mh.cmd_remove_cube, 'file')
self.assertEquals(str(ex), "can't remove cube file, used as a dependency")
-
def test_set_state(self):
user = self.session.user
self.mh.set_state(user.eid, 'deactivated')
--- a/web/data/cubicweb.edition.js Thu Jul 02 17:13:52 2009 +0200
+++ b/web/data/cubicweb.edition.js Fri Jul 03 10:27:13 2009 +0200
@@ -305,8 +305,9 @@
}
function _clearPreviousErrors(formid) {
+ jQuery('#' + formid + 'ErrorMessage').remove();
jQuery('#' + formid + ' span.error').remove();
- jQuery('div.errorMessage').remove();
+ jQuery('#' + formid + ' .error').removeClass('error');
}
function _displayValidationerrors(formid, eid, errors) {
@@ -335,7 +336,7 @@
var innernode = UL(null, map(LI, globalerrors));
}
// insert DIV and innernode before the form
- var div = DIV({'class' : "errorMessage"});
+ var div = DIV({'class' : "errorMessage", 'id': formid + 'ErrorMessage'});
div.appendChild(innernode);
jQuery('#' + formid).before(div);
}
--- a/web/views/editforms.py Thu Jul 02 17:13:52 2009 +0200
+++ b/web/views/editforms.py Fri Jul 03 10:27:13 2009 +0200
@@ -368,8 +368,13 @@
divid = '%s-%s-%s' % (peid, rtype, entity.eid)
title = self.schema.rschema(rtype).display_name(self.req, role)
removejs = self.removejs % (peid, rtype,entity.eid)
+ countkey = '%s_count' % rtype
+ try:
+ self.req.data[countkey] += 1
+ except:
+ self.req.data[countkey] = 1
self.w(form.form_render(divid=divid, title=title, removejs=removejs,
- **kwargs))
+ counter=self.req.data[countkey], **kwargs))
def add_hiddens(self, form, entity, peid, rtype, role):
# to ease overriding (see cubes.vcsfile.views.forms for instance)
--- a/web/views/formrenderers.py Thu Jul 02 17:13:52 2009 +0200
+++ b/web/views/formrenderers.py Fri Jul 03 10:27:13 2009 +0200
@@ -500,7 +500,7 @@
w(u'<div class="iformBody">')
values['removemsg'] = self.req.__('remove this %s' % form.edited_entity.e_schema)
w(u'<div class="iformTitle"><span>%(title)s</span> '
- '#<span class="icounter">1</span> '
+ '#<span class="icounter">%(counter)s</span> '
'[<a href="javascript: %(removejs)s;noop();">%(removemsg)s</a>]</div>'
% values)
# cleanup values