1
0
Fork 0
mirror of https://github.com/yweber/lodel2.git synced 2025-11-14 18:09:17 +01:00

Delete implementation for EmClass and EmField

The EmField version cannot be tested yet (drop column not yet implemented for sqlite in Database.sqlalter)
This commit is contained in:
Yann 2015-06-26 11:50:11 +02:00
commit a042306c14
4 changed files with 35 additions and 5 deletions

View file

@ -67,8 +67,26 @@ class EmClass(EmComponent):
return resclass
## @brief Delete a class if it's ''empty''
# If a class has no fieldgroups delete it
# @return bool : True if deleted False if deletion aborded
def delete(self):
do_delete = True
fieldgroups = self.fieldgroups()
if len(fieldgroups) > 0:
do_delete = False
return False
dbe = self.__class__.getDbE()
meta = sqlutils.meta(dbe)
#Here we have to give a connection
class_table = sql.Table(self.name, meta)
meta.drop_all(tables=[class_table], bind=dbe)
return super(EmClass, self).delete()
## Retrieve list of the field_groups of this class
# @return field_groups [EmFieldGroup]:
# @return A list of fieldgroups instance
def fieldgroups(self):
records = self._fieldgroups_db()
fieldgroups = [EditorialModel.fieldgroups.EmFieldGroup(int(record.uid)) for record in records]

View file

@ -216,7 +216,7 @@ class EmComponent(object):
## Delete this component data in the database
# @return bool
# @return bool : True if deleted False if deletion aborded
# @todo Use something like __del__ instead (or call it at the end)
# @throw RunTimeError if it was unable to do the deletion
def delete(self):
@ -232,7 +232,7 @@ class EmComponent(object):
super(EmComponent, self).__setattr__('deleted', True)
#</SQL>
pass
return True
## get_max_rank
# Retourne le rank le plus élevé pour le groupe de component au quel apartient l'objet actuelle

View file

@ -10,6 +10,7 @@ from EditorialModel.types import EmType
from Database import sqlutils
from Database.sqlwrapper import SqlWrapper
from Database.sqlquerybuilder import SqlQueryBuilder
from Database.sqlalter import DropColumn
import sqlalchemy as sql
@ -80,6 +81,16 @@ class EmField(EmComponent):
return exists
## @brief Delete a field if it's not linked
# @return bool : True if deleted False if deletion aborded
# @todo Check if unconditionnal deletion is correct
def delete(self):
class_table = self.get_class_table()
field_col = sql.Column(self.name)
ddl = DropColumn(class_table, field_col)
sqlutils.ddl_execute(ddl, self.__class__.getDbE())
return super(EmField, self).delete()
## addFieldColumnToClassTable (Function)
#

View file

@ -129,6 +129,7 @@ class TestField(FieldTestCase):
self.assertIn(field_column.name, field_table_columns)
pass
@unittest.skip("Delete not implemente for sqlite...")
def test_deletion(self):
field_names = ['field1', 'field2']
for name in field_names: