dapper-sqls 1.2.1__py3-none-any.whl → 1.2.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -96,27 +96,32 @@ class Result(object):
96
96
  return self._error
97
97
 
98
98
  class Fetchone(BaseResult):
99
- def __init__(self, query : str | tuple, cursor, result, exception: Exception = None):
99
+
100
+ def __init__(self, query: str | tuple, cursor, result, exception: Exception = None):
100
101
  super().__init__(query)
101
102
  self._error = Error(exception)
102
103
  self._list = []
103
- self._dict : dict[str, Any] = {}
104
- if cursor != None:
104
+ self._dict: dict[str, Any] = {}
105
+
106
+ if cursor is not None:
105
107
  self._status_code = 200
106
108
  self._success = True
107
109
  if result:
108
110
  sensitive_fields = SensitiveFields.get()
109
111
  columns = [column[0] for column in cursor.description]
110
112
  raw_dict = dict(zip(columns, result))
113
+
114
+ # Exclui campos sensíveis
111
115
  self._dict = {
112
116
  k: v for k, v in raw_dict.items()
113
- if k not in sensitive_fields
117
+ if k not in sensitive_fields
114
118
  }
115
- self._list = result
119
+ # Lista só com valores que não sejam None
120
+ self._list = [v for v in result if v is not None]
116
121
  else:
117
122
  self._status_code = SQL_ERROR_HTTP_CODES.get(self._error.type, 500)
118
123
  self._success = False
119
-
124
+
120
125
  def _organize_joined_tables(self, joins: list):
121
126
  alias_to_table_name = {
122
127
  join.model.TABLE_ALIAS: join.model.__class__.__name__ for join in joins
@@ -126,9 +131,11 @@ class Result(object):
126
131
  return
127
132
 
128
133
  alias_data = defaultdict(dict)
134
+ cleaned_alias_data : dict[str, dict] = {}
129
135
  keys_to_remove = []
130
136
 
131
- for key, value in self._dict.items():
137
+ for key, value in self._dict.items():
138
+
132
139
  for alias_table, table_name in alias_to_table_name.items():
133
140
  if alias_table in key:
134
141
  column_name = key.replace(alias_table, '')
@@ -136,15 +143,27 @@ class Result(object):
136
143
  keys_to_remove.append(key)
137
144
  break
138
145
 
146
+ if alias_data:
147
+ for table_name, cols in alias_data.items():
148
+ if all(v is None for v in cols.values()):
149
+ cleaned_alias_data[table_name] = {}
150
+ else:
151
+ cleaned_alias_data[table_name] = {
152
+ k: v for k, v in cols.items() if v is not None
153
+ }
154
+
139
155
  for key in keys_to_remove:
140
- self._dict.pop(key)
156
+ self._dict.pop(key, None)
141
157
 
142
- if alias_data:
143
- self._dict['joined_tables'] = dict(alias_data)
158
+ if cleaned_alias_data:
159
+ self._dict['joined_tables'] = {
160
+ t: {k: v for k, v in cols.items() if v}
161
+ for t, cols in cleaned_alias_data.items()
162
+ }
144
163
 
145
164
  if self._list:
146
165
  columns = [col for col in self._dict.keys() if col]
147
- self._list = [self._dict[col] for col in columns]
166
+ self._list = [self._dict[col] for col in columns if self._dict[col] is not None]
148
167
 
149
168
  def model_dump(self, *, include: set[str] = None):
150
169
  if not self.success:
@@ -153,11 +172,14 @@ class Result(object):
153
172
  'message': self.error.message
154
173
  }
155
174
 
156
- result_dict = self._dict.copy()
175
+ result_dict = {k: v for k, v in self._dict.items() if v is not None}
157
176
 
158
177
  if include is not None:
159
178
  include = set(include)
160
- result_dict = {k: v for k, v in result_dict.items() if k in include or k == 'joined_tables'}
179
+ result_dict = {
180
+ k: v for k, v in result_dict.items()
181
+ if k in include or k == 'joined_tables'
182
+ }
161
183
 
162
184
  return {
163
185
  'status_code': self.status_code,
@@ -174,7 +196,7 @@ class Result(object):
174
196
 
175
197
  @property
176
198
  def dict(self):
177
- return self._dict
199
+ return {k: v for k, v in self._dict.items() if v is not None}
178
200
 
179
201
  @property
180
202
  def success(self):
@@ -220,24 +242,25 @@ class Result(object):
220
242
  def model_dump(self, *, include: set[str] = None):
221
243
  return self._fetchone.model_dump(include=include)
222
244
 
223
-
224
245
  class Fetchall(BaseResult):
225
-
226
- def __init__(self, query : str | tuple, cursor, result, exception: Exception = None):
246
+ def __init__(self, query: str | tuple, cursor, result, exception: Exception = None):
227
247
  super().__init__(query)
228
248
  self._error = Error(exception)
229
- self._list_dict : list[dict[str, Any]] = []
230
- if cursor != None:
249
+ self._list_dict: list[dict[str, Any]] = []
250
+
251
+ if cursor is not None:
231
252
  self._status_code = 200
232
253
  self._success = True
233
254
  if result:
234
255
  sensitive_fields = SensitiveFields.get()
235
256
  columns = [column[0] for column in cursor.description]
257
+
236
258
  for r in result:
237
259
  raw_dict = dict(zip(columns, r))
260
+ # remove campos sensíveis
238
261
  clean_dict = {
239
262
  k: v for k, v in raw_dict.items()
240
- if k not in sensitive_fields
263
+ if k not in sensitive_fields
241
264
  }
242
265
  self._list_dict.append(clean_dict)
243
266
  else:
@@ -251,9 +274,10 @@ class Result(object):
251
274
 
252
275
  for item in self._list_dict:
253
276
  alias_data = defaultdict(dict)
277
+ cleaned_alias_data : dict[str, dict] = {}
254
278
  keys_to_remove = []
255
279
 
256
- for key, value in item.items():
280
+ for key, value in item.items():
257
281
  for alias_table, table_name in alias_to_table_name.items():
258
282
  if alias_table in key:
259
283
  column_name = key.replace(alias_table, '')
@@ -261,11 +285,24 @@ class Result(object):
261
285
  keys_to_remove.append(key)
262
286
  break
263
287
 
288
+ if alias_data:
289
+ for table_name, cols in alias_data.items():
290
+ if all(v is None for v in cols.values()):
291
+ cleaned_alias_data[table_name] = {}
292
+ else:
293
+ cleaned_alias_data[table_name] = {
294
+ k: v for k, v in cols.items() if v is not None
295
+ }
296
+
264
297
  for key in keys_to_remove:
265
- del item[key]
298
+ item.pop(key, None)
266
299
 
267
- if alias_data:
268
- item['joined_tables'] = dict(alias_data)
300
+ if cleaned_alias_data:
301
+ # filtra None também dentro de joined_tables
302
+ item['joined_tables'] = {
303
+ t: {k: v for k, v in cols.items()}
304
+ for t, cols in cleaned_alias_data.items()
305
+ }
269
306
 
270
307
  def model_dump(self, *, include: set[str] = None):
271
308
  if not self.success:
@@ -274,11 +311,18 @@ class Result(object):
274
311
  'message': self.error.message
275
312
  }
276
313
 
277
- data = self._list_dict
314
+ # remove valores None de todos os dicts
315
+ data = [
316
+ {k: v for k, v in d.items() if v is not None}
317
+ for d in self._list_dict
318
+ ]
278
319
 
279
320
  if include is not None:
280
321
  include = set(include)
281
- data = [{k: v for k, v in d.items() if k in include or k == 'joined_tables'} for d in data]
322
+ data = [
323
+ {k: v for k, v in d.items() if k in include or k == 'joined_tables'}
324
+ for d in data
325
+ ]
282
326
 
283
327
  return {
284
328
  'status_code': self.status_code,
@@ -291,7 +335,10 @@ class Result(object):
291
335
 
292
336
  @property
293
337
  def list_dict(self):
294
- return self._list_dict
338
+ return [
339
+ {k: v for k, v in d.items() if v is not None}
340
+ for d in self._list_dict
341
+ ]
295
342
 
296
343
  @property
297
344
  def success(self):
@@ -34,9 +34,12 @@ class DataBaseInstall(object):
34
34
  with self.engine.connect() as conn:
35
35
  self.tables.meta_data.create_all(self.engine)
36
36
  if hasattr(self.tables, 'system'):
37
- ins = insert(self.tables.system).values(App=app_name, Tema='light')
38
- conn.execute(ins)
39
- conn.commit()
37
+ try:
38
+ ins = insert(self.tables.system).values(App=app_name, Tema='light')
39
+ conn.execute(ins)
40
+ conn.commit()
41
+ except:
42
+ ...
40
43
  else:
41
44
  if not self.are_tables_existing(self.engine):
42
45
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dapper-sqls
3
- Version: 1.2.1
3
+ Version: 1.2.3
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  Author: Samuel Semedo
@@ -26,15 +26,15 @@ dapper_sqls/models/base.py,sha256=KmlbLa9_k0ioGDWVjISes4kIP8OgElAoCqXbr3VbSCE,85
26
26
  dapper_sqls/models/connection.py,sha256=z5OkYeY5Qp-dXdy1bvZHAlov-Kq-lgMxC6RqNdTiiq4,1745
27
27
  dapper_sqls/models/http.py,sha256=rCmf4Mj1bA_oc0k0vDxi2v1Cqd4oXDDU83P_6kNwTuA,356
28
28
  dapper_sqls/models/query_field.py,sha256=QOQlB6hlVm7fGZqsAFgWGznLEDSR03uTI_--xDyUEao,7763
29
- dapper_sqls/models/result.py,sha256=K_EIZxQljqFiHinbLwlda87ZCktZ4buvvws1smGIh5Q,12707
29
+ dapper_sqls/models/result.py,sha256=EsbgP7sY8QO5i-ddPwWH9mmRYGPLpQnwe89H1zWImqg,14728
30
30
  dapper_sqls/sqlite/__init__.py,sha256=EUREulLqSlZ43_3pEYlDJ3rF7i0cSwROnqrlZX9ircI,247
31
31
  dapper_sqls/sqlite/async_local_database.py,sha256=VqMdAD2wdzqFMIKEpnOgbajEwwSmxLqtSkqWSipbu6o,7754
32
32
  dapper_sqls/sqlite/decorators.py,sha256=hvehaUi6uV3BkLNOcbGhv3-fV0VJD0hLomXznSSMJEA,2420
33
- dapper_sqls/sqlite/installer.py,sha256=nCDGRNUEvAEHx8Pw3izXx9miJJ3o5cjjPWA07nlqAD4,4781
33
+ dapper_sqls/sqlite/installer.py,sha256=pHRXFn8gFPUj_d42ErKcMUDFmzc8tK1DabuhgqUIuSw,4901
34
34
  dapper_sqls/sqlite/local_database.py,sha256=kuEVRJvzUUQg3X1Abq9ZYslO9n5IMovaCj7jnB51qSs,5902
35
35
  dapper_sqls/sqlite/models.py,sha256=m1I0-iYDdv-4fVYMsAboRYHbMEcwI4GScZSdbs7_nUY,2232
36
36
  dapper_sqls/sqlite/utils.py,sha256=22n2ry7_7b7XGDjwv3sY8swADpXDAynR0-E8WQrvHzc,230
37
- dapper_sqls-1.2.1.dist-info/METADATA,sha256=Lcvmw9RHD9l5YFo7Lag1BaqHIdKwduFjcHlUWefuqHk,964
38
- dapper_sqls-1.2.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
39
- dapper_sqls-1.2.1.dist-info/top_level.txt,sha256=Pe1YqCPngnYbSVdhJyDrdFWHFCOqBvFW8WK7kTaIax4,12
40
- dapper_sqls-1.2.1.dist-info/RECORD,,
37
+ dapper_sqls-1.2.3.dist-info/METADATA,sha256=8la5wW7ydUMVjseiK-XDcDaalnkz2tMYTFl0-g7HZms,964
38
+ dapper_sqls-1.2.3.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
39
+ dapper_sqls-1.2.3.dist-info/top_level.txt,sha256=Pe1YqCPngnYbSVdhJyDrdFWHFCOqBvFW8WK7kTaIax4,12
40
+ dapper_sqls-1.2.3.dist-info/RECORD,,