dapper-sqls 1.1.3__py3-none-any.whl → 1.2.0__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.
@@ -1,13 +1,14 @@
1
1
  # coding: utf-8
2
- from sqlalchemy import create_engine, text, insert, delete, update
3
- from .models import BaseTables, Path, System, EnvVar
2
+ from sqlalchemy import create_engine, text, insert, delete, update, Connection
3
+ from .models import BaseTables, Path, System, EnvVar, NotificationData
4
4
  from .utils import get_value
5
5
 
6
6
  class BaseLocalDatabase(object):
7
7
 
8
- def __init__(self, app_name : str, path : str, is_new_database : bool):
8
+ def __init__(self, app_name : str, path : str, is_new_database : bool, insistent_tables : list[str]):
9
9
  self._app_name = app_name
10
10
  self.is_new_database = is_new_database
11
+ self.insistent_tables = insistent_tables
11
12
  self._engine = create_engine(f'sqlite:///{path}')
12
13
 
13
14
  @property
@@ -17,9 +18,22 @@ class BaseLocalDatabase(object):
17
18
  @property
18
19
  def app_name(self):
19
20
  return self._app_name
21
+
22
+ def close(self):
23
+ self._engine.dispose()
24
+ self._engine.pool.dispose()
25
+ self._engine = None
20
26
 
21
- def select(self, table : str, where : str = None):
22
- with self.engine.connect() as conn:
27
+ def select(self, table : str, where : str = None, conn : Connection = None):
28
+ if not conn:
29
+ with self.engine.connect() as conn:
30
+ if where:
31
+ query = conn.execute(text(f"select * from {table} where App = '{self.app_name}' and {where}"))
32
+ else:
33
+ query = conn.execute(text(f"select * from {table} where App = '{self.app_name}'"))
34
+ data = [dict(zip(tuple(query.keys()), i)) for i in query.cursor]
35
+ return data
36
+ else:
23
37
  if where:
24
38
  query = conn.execute(text(f"select * from {table} where App = '{self.app_name}' and {where}"))
25
39
  else:
@@ -107,6 +121,26 @@ class BaseLocalDatabase(object):
107
121
  ).values(Tema=theme)
108
122
  conn.execute(stmt)
109
123
  conn.commit()
124
+
125
+ def insert_notification(self, data : NotificationData):
126
+ with self.engine.connect() as conn:
127
+ ins = insert(BaseTables.notification).values(App=self.app_name, guid=data.guid, local=data.local, title=data.title, message=data.message, type=data.type,date=data.date)
128
+ conn.execute(ins)
129
+ conn.commit()
130
+
131
+ def delete_notification(self, guid : str):
132
+ with self.engine.connect() as conn:
133
+ conn.execute(delete(BaseTables.notification).where((BaseTables.notification.c.guid == guid) & (BaseTables.notification.c.App == self.app_name)))
134
+ conn.commit()
135
+
136
+ def clear_notification(self):
137
+ with self.engine.connect() as conn:
138
+ conn.execute(delete(BaseTables.notification).where(BaseTables.notification.c.App == self.app_name))
139
+ conn.commit()
140
+
141
+ def get_notifications(self):
142
+ notifications = self.select('notification')
143
+ return [NotificationData(**notification) for notification in notifications]
110
144
 
111
145
 
112
146
 
@@ -1,8 +1,11 @@
1
1
  # coding: utf-8
2
- from sqlalchemy import MetaData, Table, Column, Integer, String
2
+ from sqlalchemy import MetaData, Table, Column, Integer, String, TIMESTAMP
3
+ from pydantic import BaseModel, Field
4
+ from datetime import datetime
3
5
 
4
6
  class BaseTables:
5
7
  meta_data = MetaData()
8
+
6
9
  system = Table(
7
10
  'system', meta_data,
8
11
  Column('id', Integer, primary_key=True),
@@ -24,6 +27,19 @@ class BaseTables:
24
27
  Column('Path', String)
25
28
  )
26
29
 
30
+ notification = Table(
31
+ 'notification',
32
+ meta_data,
33
+ Column('id', Integer, primary_key=True),
34
+ Column('App', String),
35
+ Column('guid', String, unique=True),
36
+ Column('local', String),
37
+ Column('title', String),
38
+ Column('message', String),
39
+ Column('type', String),
40
+ Column('date', TIMESTAMP),
41
+ )
42
+
27
43
  class BaseTableModel(object):
28
44
  def __init__(self, dados : dict):
29
45
  self.id : int = dados['id']
@@ -47,6 +63,14 @@ class System(BaseTableModel):
47
63
  super().__init__(dados)
48
64
  self.Theme : str = dados['Tema']
49
65
 
66
+ class NotificationData(BaseModel):
67
+ guid : str = Field(..., description="")
68
+ date : datetime = Field(..., description="")
69
+ local : str = Field(..., description="")
70
+ title : str = Field(..., description="")
71
+ message : str = Field(..., description="")
72
+ type : str = Field(..., description="")
73
+
50
74
 
51
75
 
52
76
 
@@ -5,4 +5,5 @@ def is_valid_name(name, max_length=255):
5
5
  return bool(name and len(name) <= max_length and re.match(r'^[\w\s]+$', name))
6
6
 
7
7
  def get_value(value):
8
- return getattr(value, 'value', value)
8
+ return getattr(value, 'value', value)
9
+
dapper_sqls/utils.py CHANGED
@@ -1,9 +1,21 @@
1
1
  # coding: utf-8
2
2
 
3
- def get_dict_args(local : dict , ignore_args = [], ignore_values_none = True):
4
- if ignore_values_none:
5
- return {k: v for k, v in local.items() if k != 'self' and k != 'cls' and v != None and k not in ignore_args}
6
- return {k: v for k, v in local.items() if k != 'self' and k != 'cls' and k not in ignore_args}
3
+ def get_dict_args(local: dict, ignore_args=None, ignore_values_none=True):
4
+ if ignore_args is None:
5
+ ignore_args = []
6
+
7
+ def is_valid_key(k, v):
8
+ if k in ('self', 'cls'):
9
+ return False
10
+ if k in ignore_args:
11
+ return False
12
+ if k.startswith('__') and k.endswith('__'):
13
+ return False
14
+ if ignore_values_none and v is None:
15
+ return False
16
+ return True
17
+
18
+ return {k: v for k, v in local.items() if is_valid_key(k, v)}
7
19
 
8
20
  class ArgsStored:
9
21
  def __init__(self, model : object | None, query : str | None, params : list | tuple | None, additional_sql : str, select_top : int | None):
@@ -0,0 +1,41 @@
1
+ Metadata-Version: 2.1
2
+ Name: dapper-sqls
3
+ Version: 1.2.0
4
+ Summary: UNKNOWN
5
+ Home-page: UNKNOWN
6
+ Author: Samuel Semedo
7
+ License: UNKNOWN
8
+ Platform: UNKNOWN
9
+ Requires-Dist: aiohappyeyeballs
10
+ Requires-Dist: aiohttp
11
+ Requires-Dist: aioodbc
12
+ Requires-Dist: aiosignal
13
+ Requires-Dist: aiosqlite
14
+ Requires-Dist: annotated-types
15
+ Requires-Dist: async-timeout
16
+ Requires-Dist: attrs
17
+ Requires-Dist: certifi
18
+ Requires-Dist: charset-normalizer
19
+ Requires-Dist: check-wheel-contents
20
+ Requires-Dist: click
21
+ Requires-Dist: colorama
22
+ Requires-Dist: frozenlist
23
+ Requires-Dist: greenlet
24
+ Requires-Dist: idna
25
+ Requires-Dist: multidict
26
+ Requires-Dist: packaging
27
+ Requires-Dist: propcache
28
+ Requires-Dist: pydantic
29
+ Requires-Dist: pydantic-core
30
+ Requires-Dist: PyJWT
31
+ Requires-Dist: pyodbc
32
+ Requires-Dist: requests
33
+ Requires-Dist: SQLAlchemy
34
+ Requires-Dist: tomli
35
+ Requires-Dist: typing-extensions
36
+ Requires-Dist: urllib3
37
+ Requires-Dist: wheel-filename
38
+ Requires-Dist: yarl
39
+
40
+ UNKNOWN
41
+
@@ -0,0 +1,40 @@
1
+ dapper_sqls/__init__.py,sha256=PEnB75qUOVDne--AevMMMaB34PbVuMVv4tIsBjLUcT4,473
2
+ dapper_sqls/_types.py,sha256=PM0wWdWjnDB5i-fl2AinWJkcssx4gs3gzhj8GSV1A2s,1186
3
+ dapper_sqls/config.py,sha256=WSG3m-8_snWrc8rg37BSTZcxcBOGAdR5mVdlWF3V-Tg,5038
4
+ dapper_sqls/decorators.py,sha256=I2Uo3Uj1-K4XVTNTvcejaUfd_tuUmM6kOWXrMyX1Dts,2767
5
+ dapper_sqls/utils.py,sha256=G_smIX7sHuBy_eGCdy1flpIJIr-Y-yZtjLdKAZXxwog,3645
6
+ dapper_sqls/async_dapper/__init__.py,sha256=lBXRyXMCaiwgcK5TCw5rg-niwFS4GcZVW5Q2enKcS-0,47
7
+ dapper_sqls/async_dapper/async_dapper.py,sha256=n9oDmgvRvB3TkuW3e-rcvy35VZfYespB9qn9qtCVa7s,2454
8
+ dapper_sqls/async_dapper/async_executors.py,sha256=8P-tvoq45fuPrzwbESbwlmTvb0OjBAuEhhNj30AxzlY,17213
9
+ dapper_sqls/builders/__init__.py,sha256=o_dGrHF09NOj3KFLpkpfaRzJMgYcddpQy-QTOJJTLPA,153
10
+ dapper_sqls/builders/query.py,sha256=Qf2V4MSSrZsHsMoSjczrAga5gcRf6Vl-vhJxtcLGVBA,8345
11
+ dapper_sqls/builders/stored.py,sha256=EHNRTLFYDVvqqWkmQggzJIbXfTKZN4Se8rbME7wLPHU,3131
12
+ dapper_sqls/builders/stp.py,sha256=LELylyG5tefcIk6kpsUTTuCkakRKTu93OwWCHB6mxU4,4915
13
+ dapper_sqls/builders/model/__init__.py,sha256=9cAgoo-zu82YhtsmePseZhfeX94UMwfYuP9j-3d597Q,41
14
+ dapper_sqls/builders/model/model.py,sha256=lj0QKcNT2XYGZ5MXGje4klsFuRbZpA8h1mQ0njZ5mr8,34749
15
+ dapper_sqls/builders/model/utils.py,sha256=w-EBGxwltFFIw4jGvuQAvyCAnoDysqaPhfk86JLvCTs,27583
16
+ dapper_sqls/dapper/__init__.py,sha256=AlQJ-QYMqKeerSQBM8Dc9_VQwUKCN4bl4ThKHsTlYms,38
17
+ dapper_sqls/dapper/dapper.py,sha256=3sFRtgw_M3zZI8dyDJacVFwzAuH7jbyQehfCiYMymZs,2584
18
+ dapper_sqls/dapper/executors.py,sha256=e6JZ2urLAMI3AyuxAquaQ9gficrtIxRswJnQS7pPTaM,16717
19
+ dapper_sqls/http/__init__.py,sha256=-BkIvJqXqnzFIpsBlipLUj_Hvbx_qvFwDF_LekmXh7Y,91
20
+ dapper_sqls/http/aiohttp.py,sha256=Z8ugmMI7YiowYwS3qArdmj_cq2neUo0cY3EY3n5CUos,6334
21
+ dapper_sqls/http/decorators.py,sha256=zBWujQ8pbSYCl1CAvGJieXDu97fPN4hITRafTISajhU,3942
22
+ dapper_sqls/http/models.py,sha256=dHWOZ_bo9EhRXFSIf1eHDe0zG6pY58_TWtif5Hr-xPg,1724
23
+ dapper_sqls/http/request.py,sha256=dbiCv1gc3IbHolzZteF2dlVeVA8jdHnT_n-gqWqdjGQ,5690
24
+ dapper_sqls/models/__init__.py,sha256=pRrgVBMx8_AHPBKr7Zv7a2Mr3gYJpVHl-lRXAKZ6cJE,496
25
+ dapper_sqls/models/base.py,sha256=KmlbLa9_k0ioGDWVjISes4kIP8OgElAoCqXbr3VbSCE,8588
26
+ dapper_sqls/models/connection.py,sha256=z5OkYeY5Qp-dXdy1bvZHAlov-Kq-lgMxC6RqNdTiiq4,1745
27
+ dapper_sqls/models/http.py,sha256=rCmf4Mj1bA_oc0k0vDxi2v1Cqd4oXDDU83P_6kNwTuA,356
28
+ dapper_sqls/models/query_field.py,sha256=QOQlB6hlVm7fGZqsAFgWGznLEDSR03uTI_--xDyUEao,7763
29
+ dapper_sqls/models/result.py,sha256=K_EIZxQljqFiHinbLwlda87ZCktZ4buvvws1smGIh5Q,12707
30
+ dapper_sqls/sqlite/__init__.py,sha256=EUREulLqSlZ43_3pEYlDJ3rF7i0cSwROnqrlZX9ircI,247
31
+ dapper_sqls/sqlite/async_local_database.py,sha256=VqMdAD2wdzqFMIKEpnOgbajEwwSmxLqtSkqWSipbu6o,7754
32
+ dapper_sqls/sqlite/decorators.py,sha256=hvehaUi6uV3BkLNOcbGhv3-fV0VJD0hLomXznSSMJEA,2420
33
+ dapper_sqls/sqlite/installer.py,sha256=nCDGRNUEvAEHx8Pw3izXx9miJJ3o5cjjPWA07nlqAD4,4781
34
+ dapper_sqls/sqlite/local_database.py,sha256=kuEVRJvzUUQg3X1Abq9ZYslO9n5IMovaCj7jnB51qSs,5902
35
+ dapper_sqls/sqlite/models.py,sha256=m1I0-iYDdv-4fVYMsAboRYHbMEcwI4GScZSdbs7_nUY,2232
36
+ dapper_sqls/sqlite/utils.py,sha256=22n2ry7_7b7XGDjwv3sY8swADpXDAynR0-E8WQrvHzc,230
37
+ dapper_sqls-1.2.0.dist-info/METADATA,sha256=zR1hQdDMHsMayWXuNJuHFgnh9JeTwEtz0ScH2wrGMME,964
38
+ dapper_sqls-1.2.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
39
+ dapper_sqls-1.2.0.dist-info/top_level.txt,sha256=Pe1YqCPngnYbSVdhJyDrdFWHFCOqBvFW8WK7kTaIax4,12
40
+ dapper_sqls-1.2.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: bdist_wheel (0.45.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,10 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: dapper_sqls
3
- Version: 1.1.3
4
- Author: Samuel Semedo
5
- Requires-Dist: aioodbc==0.5.0
6
- Requires-Dist: annotated-types==0.7.0
7
- Requires-Dist: greenlet==3.1.1
8
- Requires-Dist: pyodbc==5.2.0
9
- Requires-Dist: SQLAlchemy==2.0.36
10
- Requires-Dist: typing_extensions==4.12.2
@@ -1,33 +0,0 @@
1
- dapper_sqls/__init__.py,sha256=-m_igeGpFiWm-B1WEpyNg9nIC3WApaLEdlbRg6v61cg,174
2
- dapper_sqls/_types.py,sha256=GM_qDsjKGRSFC0NsU5hkqLKH-ydVKJ-1TgEkxQzi4Hw,181
3
- dapper_sqls/config.py,sha256=CN5x_E8PlV734Ra57ensLbdFCxe7ASXp7M1wdubcT5s,4625
4
- dapper_sqls/decorators.py,sha256=I2Uo3Uj1-K4XVTNTvcejaUfd_tuUmM6kOWXrMyX1Dts,2767
5
- dapper_sqls/utils.py,sha256=0vXX-mhbwSL3Kx7_ErHaxaASgJzrs-g9kwW38kEJZDw,3452
6
- dapper_sqls/async_dapper/__init__.py,sha256=lBXRyXMCaiwgcK5TCw5rg-niwFS4GcZVW5Q2enKcS-0,47
7
- dapper_sqls/async_dapper/async_dapper.py,sha256=n9oDmgvRvB3TkuW3e-rcvy35VZfYespB9qn9qtCVa7s,2454
8
- dapper_sqls/async_dapper/async_executors.py,sha256=uaI5xemBC3Cgs69utC6qqmaaMPdXegarkxyeWVkiTog,13156
9
- dapper_sqls/builders/__init__.py,sha256=o_dGrHF09NOj3KFLpkpfaRzJMgYcddpQy-QTOJJTLPA,153
10
- dapper_sqls/builders/query.py,sha256=9-wh2zALVNc4dbBcmkvZvKCxKxEoR4G8Sovcrp1go6Q,3895
11
- dapper_sqls/builders/stored.py,sha256=dAaKeDfW_9mKqkEgpKrTHwZmzRpsb_iYuJW9v2RXAkA,2778
12
- dapper_sqls/builders/stp.py,sha256=wYhhO-tlfH2izUyXhMn9sipy_8_IbKwcqkm0SvkdJfo,4739
13
- dapper_sqls/builders/model/__init__.py,sha256=9cAgoo-zu82YhtsmePseZhfeX94UMwfYuP9j-3d597Q,41
14
- dapper_sqls/builders/model/model.py,sha256=bawug0tc5PuRVgYU_3JdI7l9s4RyTQT3tDBF5TaGuQo,17026
15
- dapper_sqls/builders/model/utils.py,sha256=nhTODL6WTGNI5vtKZ_cRyGcBtv8G574a52-HUT1axao,17240
16
- dapper_sqls/dapper/__init__.py,sha256=AlQJ-QYMqKeerSQBM8Dc9_VQwUKCN4bl4ThKHsTlYms,38
17
- dapper_sqls/dapper/dapper.py,sha256=3sFRtgw_M3zZI8dyDJacVFwzAuH7jbyQehfCiYMymZs,2584
18
- dapper_sqls/dapper/executors.py,sha256=-Q9gFkNXyP1QSezta2AtywOIRx_8PsTyMOvl0q4SwH4,12760
19
- dapper_sqls/models/__init__.py,sha256=z1kR1XLmwxQTMctvsbVR8lcXNafQXxkEP0mdbKzB31s,175
20
- dapper_sqls/models/base.py,sha256=ddBgBPTVA2_cPNZ4QrYNXqcpsQ8m4Ipy7TWGoHxYF4c,766
21
- dapper_sqls/models/connection.py,sha256=xSSB12_Odrdplfn7_724slEAE02rDt2yrdNFsD3ENuU,1746
22
- dapper_sqls/models/http.py,sha256=rCmf4Mj1bA_oc0k0vDxi2v1Cqd4oXDDU83P_6kNwTuA,356
23
- dapper_sqls/models/result.py,sha256=7IDY3omTGHV8IVpHdej1FaxGXmK1v6h_0iH9zov4Z94,3241
24
- dapper_sqls/sqlite/__init__.py,sha256=A94N9nQArs7JIzGHn7gjFIBMVxFW9rnwk-y29fL7_6k,183
25
- dapper_sqls/sqlite/async_local_database.py,sha256=cGdGeUjvtWHktkbTCQGbgCNzRdPV6EtDRnwp5x1OtyI,4450
26
- dapper_sqls/sqlite/installer.py,sha256=XlXyvNEa59Qr1Kb4bw-7JXXKZBPOuHe7HSVr1KPDYg4,4560
27
- dapper_sqls/sqlite/local_database.py,sha256=pNccTu8s34aPVVRQd8NRdDsY4yAszmF51kh9bSUY7f8,4190
28
- dapper_sqls/sqlite/models.py,sha256=rZ2R4I3EhrgAxrQwj0vUZkLsjhjHcpCLCmPMBZM19hw,1403
29
- dapper_sqls/sqlite/utils.py,sha256=ITuUrp8chmHoVWlP1Ro_EGrWagswuYjspSwmSfWBSrw,226
30
- dapper_sqls-1.1.3.dist-info/METADATA,sha256=J8Fafn2-NCfnwxtTAitVOKOMfYxv79TMHZs0AeRAgEE,290
31
- dapper_sqls-1.1.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
32
- dapper_sqls-1.1.3.dist-info/top_level.txt,sha256=Pe1YqCPngnYbSVdhJyDrdFWHFCOqBvFW8WK7kTaIax4,12
33
- dapper_sqls-1.1.3.dist-info/RECORD,,