dapper-sqls 0.9.3__py3-none-any.whl → 0.9.4__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.
- dapper_sqls/config.py +31 -153
- {dapper_sqls-0.9.3.dist-info → dapper_sqls-0.9.4.dist-info}/METADATA +1 -1
- {dapper_sqls-0.9.3.dist-info → dapper_sqls-0.9.4.dist-info}/RECORD +5 -5
- {dapper_sqls-0.9.3.dist-info → dapper_sqls-0.9.4.dist-info}/WHEEL +0 -0
- {dapper_sqls-0.9.3.dist-info → dapper_sqls-0.9.4.dist-info}/top_level.txt +0 -0
dapper_sqls/config.py
CHANGED
@@ -1,137 +1,6 @@
|
|
1
1
|
# -*- coding: latin -*-
|
2
2
|
from .models import ConnectionStringData
|
3
3
|
import sys
|
4
|
-
from _typeshed import ReadableBuffer, Unused
|
5
|
-
from types import TracebackType
|
6
|
-
from typing import Any, Final, Literal, final, overload
|
7
|
-
from typing_extensions import Self, TypeAlias
|
8
|
-
|
9
|
-
if sys.platform == "win32":
|
10
|
-
# Though this class has a __name__ of PyHKEY, it's exposed as HKEYType for some reason
|
11
|
-
@final
|
12
|
-
class HKEYType:
|
13
|
-
def __bool__(self) -> bool: ...
|
14
|
-
def __int__(self) -> int: ...
|
15
|
-
def __enter__(self) -> Self: ...
|
16
|
-
def __exit__(
|
17
|
-
self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None
|
18
|
-
) -> bool | None: ...
|
19
|
-
def Close(self) -> None: ...
|
20
|
-
def Detach(self) -> int: ...
|
21
|
-
def __hash__(self) -> int: ...
|
22
|
-
@property
|
23
|
-
def handle(self) -> int: ...
|
24
|
-
|
25
|
-
_KeyType: TypeAlias = HKEYType | int
|
26
|
-
def CloseKey(hkey: _KeyType, /) -> None: ...
|
27
|
-
def ConnectRegistry(computer_name: str | None, key: _KeyType, /) -> HKEYType: ...
|
28
|
-
def CreateKey(key: _KeyType, sub_key: str | None, /) -> HKEYType: ...
|
29
|
-
def CreateKeyEx(key: _KeyType, sub_key: str | None, reserved: int = 0, access: int = 131078) -> HKEYType: ...
|
30
|
-
def DeleteKey(key: _KeyType, sub_key: str, /) -> None: ...
|
31
|
-
def DeleteKeyEx(key: _KeyType, sub_key: str, access: int = 256, reserved: int = 0) -> None: ...
|
32
|
-
def DeleteValue(key: _KeyType, value: str, /) -> None: ...
|
33
|
-
def EnumKey(key: _KeyType, index: int, /) -> str: ...
|
34
|
-
def EnumValue(key: _KeyType, index: int, /) -> tuple[str, Any, int]: ...
|
35
|
-
def ExpandEnvironmentStrings(string: str, /) -> str: ...
|
36
|
-
def FlushKey(key: _KeyType, /) -> None: ...
|
37
|
-
def LoadKey(key: _KeyType, sub_key: str, file_name: str, /) -> None: ...
|
38
|
-
def OpenKey(key: _KeyType, sub_key: str, reserved: int = 0, access: int = 131097) -> HKEYType: ...
|
39
|
-
def OpenKeyEx(key: _KeyType, sub_key: str, reserved: int = 0, access: int = 131097) -> HKEYType: ...
|
40
|
-
def QueryInfoKey(key: _KeyType, /) -> tuple[int, int, int]: ...
|
41
|
-
def QueryValue(key: _KeyType, sub_key: str | None, /) -> str: ...
|
42
|
-
def QueryValueEx(key: _KeyType, name: str, /) -> tuple[Any, int]: ...
|
43
|
-
def SaveKey(key: _KeyType, file_name: str, /) -> None: ...
|
44
|
-
def SetValue(key: _KeyType, sub_key: str, type: int, value: str, /) -> None: ...
|
45
|
-
@overload # type=REG_DWORD|REG_QWORD
|
46
|
-
def SetValueEx(
|
47
|
-
key: _KeyType, value_name: str | None, reserved: Unused, type: Literal[4, 5], value: int | None, /
|
48
|
-
) -> None: ...
|
49
|
-
@overload # type=REG_SZ|REG_EXPAND_SZ
|
50
|
-
def SetValueEx(
|
51
|
-
key: _KeyType, value_name: str | None, reserved: Unused, type: Literal[1, 2], value: str | None, /
|
52
|
-
) -> None: ...
|
53
|
-
@overload # type=REG_MULTI_SZ
|
54
|
-
def SetValueEx(
|
55
|
-
key: _KeyType, value_name: str | None, reserved: Unused, type: Literal[7], value: list[str] | None, /
|
56
|
-
) -> None: ...
|
57
|
-
@overload # type=REG_BINARY and everything else
|
58
|
-
def SetValueEx(
|
59
|
-
key: _KeyType,
|
60
|
-
value_name: str | None,
|
61
|
-
reserved: Unused,
|
62
|
-
type: Literal[0, 3, 8, 9, 10, 11],
|
63
|
-
value: ReadableBuffer | None,
|
64
|
-
/,
|
65
|
-
) -> None: ...
|
66
|
-
@overload # Unknown or undocumented
|
67
|
-
def SetValueEx(
|
68
|
-
key: _KeyType,
|
69
|
-
value_name: str | None,
|
70
|
-
reserved: Unused,
|
71
|
-
type: int,
|
72
|
-
value: int | str | list[str] | ReadableBuffer | None,
|
73
|
-
/,
|
74
|
-
) -> None: ...
|
75
|
-
def DisableReflectionKey(key: _KeyType, /) -> None: ...
|
76
|
-
def EnableReflectionKey(key: _KeyType, /) -> None: ...
|
77
|
-
def QueryReflectionKey(key: _KeyType, /) -> bool: ...
|
78
|
-
|
79
|
-
HKEY_CLASSES_ROOT: int
|
80
|
-
HKEY_CURRENT_USER: int
|
81
|
-
HKEY_LOCAL_MACHINE: int
|
82
|
-
HKEY_USERS: int
|
83
|
-
HKEY_PERFORMANCE_DATA: int
|
84
|
-
HKEY_CURRENT_CONFIG: int
|
85
|
-
HKEY_DYN_DATA: int
|
86
|
-
|
87
|
-
KEY_ALL_ACCESS: Final = 983103
|
88
|
-
KEY_WRITE: Final = 131078
|
89
|
-
KEY_READ: Final = 131097
|
90
|
-
KEY_EXECUTE: Final = 131097
|
91
|
-
KEY_QUERY_VALUE: Final = 1
|
92
|
-
KEY_SET_VALUE: Final = 2
|
93
|
-
KEY_CREATE_SUB_KEY: Final = 4
|
94
|
-
KEY_ENUMERATE_SUB_KEYS: Final = 8
|
95
|
-
KEY_NOTIFY: Final = 16
|
96
|
-
KEY_CREATE_LINK: Final = 32
|
97
|
-
|
98
|
-
KEY_WOW64_64KEY: Final = 256
|
99
|
-
KEY_WOW64_32KEY: Final = 512
|
100
|
-
|
101
|
-
REG_BINARY: Final = 3
|
102
|
-
REG_DWORD: Final = 4
|
103
|
-
REG_DWORD_LITTLE_ENDIAN: Final = 4
|
104
|
-
REG_DWORD_BIG_ENDIAN: Final = 5
|
105
|
-
REG_EXPAND_SZ: Final = 2
|
106
|
-
REG_LINK: Final = 6
|
107
|
-
REG_MULTI_SZ: Final = 7
|
108
|
-
REG_NONE: Final = 0
|
109
|
-
REG_QWORD: Final = 11
|
110
|
-
REG_QWORD_LITTLE_ENDIAN: Final = 11
|
111
|
-
REG_RESOURCE_LIST: Final = 8
|
112
|
-
REG_FULL_RESOURCE_DESCRIPTOR: Final = 9
|
113
|
-
REG_RESOURCE_REQUIREMENTS_LIST: Final = 10
|
114
|
-
REG_SZ: Final = 1
|
115
|
-
|
116
|
-
REG_CREATED_NEW_KEY: Final = 1 # undocumented
|
117
|
-
REG_LEGAL_CHANGE_FILTER: Final = 268435471 # undocumented
|
118
|
-
REG_LEGAL_OPTION: Final = 31 # undocumented
|
119
|
-
REG_NOTIFY_CHANGE_ATTRIBUTES: Final = 2 # undocumented
|
120
|
-
REG_NOTIFY_CHANGE_LAST_SET: Final = 4 # undocumented
|
121
|
-
REG_NOTIFY_CHANGE_NAME: Final = 1 # undocumented
|
122
|
-
REG_NOTIFY_CHANGE_SECURITY: Final = 8 # undocumented
|
123
|
-
REG_NO_LAZY_FLUSH: Final = 4 # undocumented
|
124
|
-
REG_OPENED_EXISTING_KEY: Final = 2 # undocumented
|
125
|
-
REG_OPTION_BACKUP_RESTORE: Final = 4 # undocumented
|
126
|
-
REG_OPTION_CREATE_LINK: Final = 2 # undocumented
|
127
|
-
REG_OPTION_NON_VOLATILE: Final = 0 # undocumented
|
128
|
-
REG_OPTION_OPEN_LINK: Final = 8 # undocumented
|
129
|
-
REG_OPTION_RESERVED: Final = 0 # undocumented
|
130
|
-
REG_OPTION_VOLATILE: Final = 1 # undocumented
|
131
|
-
REG_REFRESH_HIVE: Final = 2 # undocumented
|
132
|
-
REG_WHOLE_HIVE_VOLATILE: Final = 1 # undocumented
|
133
|
-
|
134
|
-
error = OSError
|
135
4
|
|
136
5
|
class Config(object):
|
137
6
|
def __init__(self, server: str, database: str, username: str, password: str, sql_version: int = None, api_environment=False, default_attempts=1, default_wait_timeout=2):
|
@@ -200,38 +69,47 @@ class Config(object):
|
|
200
69
|
def sql_version(self, value):
|
201
70
|
if not isinstance(value, int) and value is not None:
|
202
71
|
raise ValueError("The value assigned to sql_version must be of type integer or None")
|
203
|
-
self._sql_version = value
|
204
|
-
|
205
72
|
|
206
73
|
@staticmethod
|
207
74
|
def get_all_odbc_driver_versions():
|
208
75
|
driver_versions = []
|
209
|
-
try:
|
210
|
-
key_path = r"SOFTWARE\ODBC\ODBCINST.INI"
|
211
|
-
key = OpenKey(HKEY_LOCAL_MACHINE, key_path)
|
212
76
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
77
|
+
# Verificar se o sistema é Windows e o módulo winreg está disponível
|
78
|
+
if sys.platform == "win32":
|
79
|
+
try:
|
80
|
+
import winreg # Importar o módulo winreg se estiver disponível
|
81
|
+
|
82
|
+
# Abrir a chave onde as informações sobre os drivers ODBC estão armazenadas
|
83
|
+
key_path = r"SOFTWARE\ODBC\ODBCINST.INI"
|
84
|
+
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_path)
|
218
85
|
|
86
|
+
# Iterar sobre as subchaves para encontrar os drivers específicos
|
87
|
+
i = 0
|
88
|
+
while True:
|
219
89
|
try:
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
90
|
+
subkey_name = winreg.EnumKey(key, i)
|
91
|
+
subkey = winreg.OpenKey(key, subkey_name)
|
92
|
+
|
93
|
+
# Verificar se a subchave contém o valor 'Driver'
|
94
|
+
try:
|
95
|
+
driver_name, _ = winreg.QueryValueEx(subkey, "Driver")
|
96
|
+
if subkey_name.startswith('ODBC Driver'):
|
97
|
+
driver_versions.append(subkey_name)
|
98
|
+
|
99
|
+
except FileNotFoundError:
|
100
|
+
pass # A subchave não possui a entrada 'Driver'
|
101
|
+
|
102
|
+
i += 1
|
103
|
+
except OSError:
|
104
|
+
break
|
226
105
|
|
227
|
-
|
228
|
-
|
229
|
-
|
106
|
+
except Exception as e:
|
107
|
+
print(f"Erro ao acessar o registro: {e}")
|
108
|
+
else:
|
109
|
+
print("A funcionalidade de obtenção de versões de drivers ODBC não é suportada neste sistema operacional.")
|
230
110
|
|
231
|
-
|
232
|
-
print(f"Erro ao acessar o registro: {e}")
|
111
|
+
return sorted(driver_versions, key=lambda x: int(x.split()[-4]), reverse=True) if driver_versions else []
|
233
112
|
|
234
|
-
return sorted(driver_versions, key=lambda x: int(x.split()[-4]), reverse=True)
|
235
113
|
|
236
114
|
|
237
115
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
dapper_sqls/__init__.py,sha256=KzUmxAhkQiQIu7Oa1yRtvRhCbsxg29aNa-MszPL6PrY,207
|
2
2
|
dapper_sqls/_types.py,sha256=GM_qDsjKGRSFC0NsU5hkqLKH-ydVKJ-1TgEkxQzi4Hw,181
|
3
|
-
dapper_sqls/config.py,sha256=
|
3
|
+
dapper_sqls/config.py,sha256=z370PREmTu8dpZV4Fm6ZyWrQBDJeb0xMr28I-ZCGRIo,4633
|
4
4
|
dapper_sqls/decorators.py,sha256=5mrabdIv4yZpwmN1XDjAhDXIU8ruoxww6b9X7fmRtE8,2655
|
5
5
|
dapper_sqls/parser.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
6
|
dapper_sqls/utils.py,sha256=vRN-g-xify34YR08OSUF18L58jAjffoc0ixOJY0FcI4,3437
|
@@ -25,7 +25,7 @@ dapper_sqls/models/result.py,sha256=4yCJmQEy87gPOi6sUdrXD3xtSWAbXeAX_uR2Ou6EYpg,
|
|
25
25
|
dapper_sqls/sqlite/__init__.py,sha256=VifBg1-pubsrYs5jm3ZsgtIqM5JzeNDS2tdInAKvjwM,49
|
26
26
|
dapper_sqls/sqlite/local_database.py,sha256=PpIokP09sfIT8JbwRVi0OxegrubDwOVXvajO4lU1U4g,9873
|
27
27
|
dapper_sqls/sqlite/models.py,sha256=QwV771SexBq5j92Ls9bgcuR1ucDx9ARazj9JkhMTSB0,712
|
28
|
-
dapper_sqls-0.9.
|
29
|
-
dapper_sqls-0.9.
|
30
|
-
dapper_sqls-0.9.
|
31
|
-
dapper_sqls-0.9.
|
28
|
+
dapper_sqls-0.9.4.dist-info/METADATA,sha256=GiSDe3Q8FUbKVTfERixEIGm15gHkV6Pr-uBx-y_Zc1U,169
|
29
|
+
dapper_sqls-0.9.4.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
30
|
+
dapper_sqls-0.9.4.dist-info/top_level.txt,sha256=Pe1YqCPngnYbSVdhJyDrdFWHFCOqBvFW8WK7kTaIax4,12
|
31
|
+
dapper_sqls-0.9.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|