Browse Source

[EmField] Suppression de l'appel à SqlWrapper

Roland Haroutiounian 9 years ago
parent
commit
e46ca292c8
1 changed files with 55 additions and 3 deletions
  1. 55
    3
      EditorialModel/fields.py

+ 55
- 3
EditorialModel/fields.py View File

@@ -6,12 +6,12 @@ from EditorialModel.fieldgroups import EmFieldGroup
6 6
 from EditorialModel.classes import EmClass
7 7
 
8 8
 from Database import sqlutils
9
-from Database.sqlwrapper import SqlWrapper
10
-from Database.sqlalter import DropColumn
9
+from Database.sqlalter import DropColumn, AddColumn
11 10
 
12 11
 import sqlalchemy as sql
13 12
 
14 13
 import logging
14
+import re
15 15
 
16 16
 logger = logging.getLogger('Lodel2.EditorialModel')
17 17
 
@@ -97,7 +97,59 @@ class EmField(EmComponent):
97 97
     def add_field_column_to_class_table(self):
98 98
         field_type = "%s%s" % (get_field_type(self.fieldtype).sql_column(), " DEFAULT 0" if self.fieldtype == 'integer' else '')
99 99
         field_class_table = self.get_class_table()
100
-        return SqlWrapper().addColumn(tname=field_class_table, colname=self.name, coltype=field_type)
100
+
101
+        sql_engine = sqlutils.getEngine()
102
+        conn = sql_engine.connect()
103
+        meta_data = sqlutils.meta(sql_engine)
104
+        table = sql.Table(field_class_table, meta_data)
105
+        new_column = self.create_column(name=self.name, type_=field_type)
106
+        ddl = AddColumn(table, new_column)
107
+        sql_query = ddl.compile(dialect=sql_engine.dialect)
108
+        sql_query = str(sql_query)
109
+        logger.debug("Executing SQL : '%s'" % sql_query)
110
+        ret = bool(conn.execute(sql_query))
111
+        return ret
112
+
113
+    def create_column(self, **kwargs):
114
+        if not 'name' in kwargs or ('type' not in kwargs and 'type_' not in kwargs):
115
+            pass
116
+
117
+        if 'type_' not in kwargs and 'type' in kwargs:
118
+            kwargs['type_'] = self.sql_to_sqla_type(kwargs['type'])
119
+            del kwargs['type']
120
+
121
+        if 'extra' in kwargs:
122
+            for extra_name in kwargs['extra']:
123
+                kwargs[extra_name] = kwargs['extra']['name']
124
+            del kwargs['extra']
125
+
126
+        if 'foreignkey' in kwargs:
127
+            foreign_key = sql.ForeignKey(kwargs['foreignkey'])
128
+            del kwargs['foreignkey']
129
+        else:
130
+            foreign_key = None
131
+
132
+        if 'primarykey' in kwargs:
133
+            kwargs['primary_key'] = kwargs['primarykey']
134
+            del kwargs['primarykey']
135
+
136
+        result = sql.Column(**kwargs)
137
+
138
+        if foreign_key is not None:
139
+            result.append_foreign_key(foreign_key)
140
+
141
+        return result
142
+
143
+    def sql_to_sqla_type(self, strtype):
144
+        if 'VARCHAR' in strtype:
145
+            check_length = re.search(re.compile('VARCHAR\(([\d]+)\)', re.IGNORECASE), strtype)
146
+            column_length = int(check_length.groups()[0]) if check_length else None
147
+            return sql.VARCHAR(lengh=column_length)
148
+        else:
149
+            try:
150
+                return getattr(sql, strtype)
151
+            except AttributeError:
152
+                raise NameError("Unknown type '%s'" % strtype)
101 153
 
102 154
     ## get_class_table (Function)
103 155
     #

Loading…
Cancel
Save