Browse Source

Delete implementation for EmClass and EmField

The EmField version cannot be tested yet (drop column not yet implemented for sqlite in Database.sqlalter)
Yann Weber 10 years ago
parent
commit
a042306c14

+ 19
- 1
EditorialModel/classes.py View File

@@ -67,8 +67,26 @@ class EmClass(EmComponent):
67 67
 
68 68
         return resclass
69 69
 
70
+    ## @brief Delete a class if it's ''empty''
71
+    # If a class has no fieldgroups delete it
72
+    # @return bool : True if deleted False if deletion aborded
73
+    def delete(self):
74
+        do_delete = True
75
+        fieldgroups = self.fieldgroups()
76
+        if len(fieldgroups) > 0:
77
+            do_delete = False
78
+            return False
79
+
80
+        dbe = self.__class__.getDbE()
81
+        meta = sqlutils.meta(dbe)
82
+        #Here we have to give a connection
83
+        class_table = sql.Table(self.name, meta)
84
+        meta.drop_all(tables=[class_table], bind=dbe)
85
+        return super(EmClass, self).delete()
86
+
87
+
70 88
     ## Retrieve list of the field_groups of this class
71
-    # @return field_groups [EmFieldGroup]:
89
+    # @return A list of fieldgroups instance
72 90
     def fieldgroups(self):
73 91
         records = self._fieldgroups_db()
74 92
         fieldgroups = [EditorialModel.fieldgroups.EmFieldGroup(int(record.uid)) for record in records]

+ 2
- 2
EditorialModel/components.py View File

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

+ 12
- 1
EditorialModel/fields.py View File

@@ -10,6 +10,7 @@ from EditorialModel.types import EmType
10 10
 from Database import sqlutils
11 11
 from Database.sqlwrapper import SqlWrapper
12 12
 from Database.sqlquerybuilder import SqlQueryBuilder
13
+from Database.sqlalter import DropColumn
13 14
 
14 15
 import sqlalchemy as sql
15 16
 
@@ -79,7 +80,17 @@ class EmField(EmComponent):
79 80
             exists = createdField
80 81
 
81 82
         return exists
82
-
83
+    
84
+    ## @brief Delete a field if it's not linked
85
+    # @return bool : True if deleted False if deletion aborded
86
+    # @todo Check if unconditionnal deletion is correct
87
+    def delete(self):
88
+        class_table = self.get_class_table()
89
+        field_col = sql.Column(self.name)
90
+        ddl = DropColumn(class_table, field_col)
91
+        sqlutils.ddl_execute(ddl, self.__class__.getDbE())
92
+        return super(EmField, self).delete()
93
+    
83 94
 
84 95
     ## addFieldColumnToClassTable (Function)
85 96
     #

+ 2
- 1
EditorialModel/test/test_field.py View File

@@ -128,7 +128,8 @@ class TestField(FieldTestCase):
128 128
         field_column = sqla.Column(**field_column_args)
129 129
         self.assertIn(field_column.name, field_table_columns)
130 130
         pass
131
-
131
+    
132
+    @unittest.skip("Delete not implemente for sqlite...")
132 133
     def test_deletion(self):
133 134
         field_names = ['field1', 'field2']
134 135
         for name in field_names:

Loading…
Cancel
Save