diff --git a/EditorialModel/classes.py b/EditorialModel/classes.py index 302a4ee..8e244bf 100644 --- a/EditorialModel/classes.py +++ b/EditorialModel/classes.py @@ -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] diff --git a/EditorialModel/components.py b/EditorialModel/components.py index a3cd675..b83b399 100644 --- a/EditorialModel/components.py +++ b/EditorialModel/components.py @@ -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) # - pass + return True ## get_max_rank # Retourne le rank le plus élevé pour le groupe de component au quel apartient l'objet actuelle diff --git a/EditorialModel/fields.py b/EditorialModel/fields.py index 7c1c082..35c8c14 100644 --- a/EditorialModel/fields.py +++ b/EditorialModel/fields.py @@ -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 @@ -79,7 +80,17 @@ class EmField(EmComponent): exists = createdField 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) # diff --git a/EditorialModel/test/test_field.py b/EditorialModel/test/test_field.py index 870d91e..dee581d 100644 --- a/EditorialModel/test/test_field.py +++ b/EditorialModel/test/test_field.py @@ -128,7 +128,8 @@ class TestField(FieldTestCase): field_column = sqla.Column(**field_column_args) 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: