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
 
67
 
68
         return resclass
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
     ## Retrieve list of the field_groups of this class
88
     ## Retrieve list of the field_groups of this class
71
-    # @return field_groups [EmFieldGroup]:
89
+    # @return A list of fieldgroups instance
72
     def fieldgroups(self):
90
     def fieldgroups(self):
73
         records = self._fieldgroups_db()
91
         records = self._fieldgroups_db()
74
         fieldgroups = [EditorialModel.fieldgroups.EmFieldGroup(int(record.uid)) for record in records]
92
         fieldgroups = [EditorialModel.fieldgroups.EmFieldGroup(int(record.uid)) for record in records]

+ 2
- 2
EditorialModel/components.py View File

216
 
216
 
217
 
217
 
218
     ## Delete this component data in the database
218
     ## Delete this component data in the database
219
-    # @return bool
219
+    # @return bool : True if deleted False if deletion aborded
220
     # @todo Use something like __del__ instead (or call it at the end)
220
     # @todo Use something like __del__ instead (or call it at the end)
221
     # @throw RunTimeError if it was unable to do the deletion
221
     # @throw RunTimeError if it was unable to do the deletion
222
     def delete(self):
222
     def delete(self):
232
 
232
 
233
         super(EmComponent, self).__setattr__('deleted', True)
233
         super(EmComponent, self).__setattr__('deleted', True)
234
         #</SQL>
234
         #</SQL>
235
-        pass
235
+        return True
236
 
236
 
237
     ## get_max_rank
237
     ## get_max_rank
238
     # Retourne le rank le plus élevé pour le groupe de component au quel apartient l'objet actuelle
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
 from Database import sqlutils
10
 from Database import sqlutils
11
 from Database.sqlwrapper import SqlWrapper
11
 from Database.sqlwrapper import SqlWrapper
12
 from Database.sqlquerybuilder import SqlQueryBuilder
12
 from Database.sqlquerybuilder import SqlQueryBuilder
13
+from Database.sqlalter import DropColumn
13
 
14
 
14
 import sqlalchemy as sql
15
 import sqlalchemy as sql
15
 
16
 
79
             exists = createdField
80
             exists = createdField
80
 
81
 
81
         return exists
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
     ## addFieldColumnToClassTable (Function)
95
     ## addFieldColumnToClassTable (Function)
85
     #
96
     #

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

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

Loading…
Cancel
Save