Skip to content

Commit bc08ecf

Browse files
AvasamAlexWaygood
andauthored
Overhaul ldap3 stubs (#9470)
Add a dependency on `types-pyasn1`, removing the need to subclass `Any`. Fill in many missing types. Use `Incomplete` rather than `Any` where applicable. Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
1 parent ab1921a commit bc08ecf

20 files changed

+405
-392
lines changed

stubs/ldap3/METADATA.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
version = "2.9.*"
2-
requires = [] # requires types-pyasn1 (not available yet)
2+
requires = ["types-pyasn1"]

stubs/ldap3/ldap3/core/connection.pyi

Lines changed: 80 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,69 @@
11
from _collections_abc import Generator, dict_keys
2-
from _typeshed import Self
2+
from _typeshed import Incomplete, ReadableBuffer, Self
33
from types import TracebackType
4-
from typing import Any
54
from typing_extensions import Literal, TypeAlias
65

6+
from pyasn1.type.base import Asn1Item
7+
78
from .pooling import ServerPool
89
from .server import Server
910

10-
SASL_AVAILABLE_MECHANISMS: Any
11-
CLIENT_STRATEGIES: Any
11+
SASL_AVAILABLE_MECHANISMS: Incomplete
12+
CLIENT_STRATEGIES: Incomplete
1213

1314
_ServerSequence: TypeAlias = (
14-
set[Server] | list[Server] | tuple[Server, ...] | Generator[Server, None, None] | dict_keys[Server, Any]
15+
set[Server] | list[Server] | tuple[Server, ...] | Generator[Server, None, None] | dict_keys[Server, Incomplete]
1516
)
1617

1718
class Connection:
18-
connection_lock: Any
19+
connection_lock: Incomplete
1920
last_error: str
20-
strategy_type: Any
21-
user: Any
22-
password: Any
23-
authentication: Any
24-
version: Any
25-
auto_referrals: Any
26-
request: Any
27-
response: Any | None
28-
result: Any
21+
strategy_type: Incomplete
22+
user: Incomplete
23+
password: Incomplete
24+
authentication: Incomplete
25+
version: Incomplete
26+
auto_referrals: Incomplete
27+
request: Incomplete
28+
response: Incomplete | None
29+
result: Incomplete
2930
bound: bool
3031
listening: bool
3132
closed: bool
32-
auto_bind: Any
33-
sasl_mechanism: Any
34-
sasl_credentials: Any
35-
socket: Any
33+
auto_bind: Incomplete
34+
sasl_mechanism: Incomplete
35+
sasl_credentials: Incomplete
36+
socket: Incomplete
3637
tls_started: bool
3738
sasl_in_progress: bool
38-
read_only: Any
39-
lazy: Any
40-
pool_name: Any
39+
read_only: Incomplete
40+
lazy: Incomplete
41+
pool_name: Incomplete
4142
pool_size: int | None
42-
cred_store: Any
43-
pool_lifetime: Any
44-
pool_keepalive: Any
43+
cred_store: Incomplete
44+
pool_lifetime: Incomplete
45+
pool_keepalive: Incomplete
4546
starting_tls: bool
46-
check_names: Any
47-
raise_exceptions: Any
48-
auto_range: Any
49-
extend: Any
50-
fast_decoder: Any
51-
receive_timeout: Any
52-
empty_attributes: Any
53-
use_referral_cache: Any
54-
auto_escape: Any
55-
auto_encode: Any
56-
source_address: Any
57-
source_port_list: Any
58-
server_pool: Any | None
59-
server: Any
60-
strategy: Any
61-
send: Any
62-
open: Any
63-
get_response: Any
64-
post_send_single_response: Any
65-
post_send_search: Any
47+
check_names: Incomplete
48+
raise_exceptions: Incomplete
49+
auto_range: Incomplete
50+
extend: Incomplete
51+
fast_decoder: Incomplete
52+
receive_timeout: Incomplete
53+
empty_attributes: Incomplete
54+
use_referral_cache: Incomplete
55+
auto_escape: Incomplete
56+
auto_encode: Incomplete
57+
source_address: Incomplete
58+
source_port_list: Incomplete
59+
server_pool: Incomplete | None
60+
server: Incomplete
61+
strategy: Incomplete
62+
send: Incomplete
63+
open: Incomplete
64+
get_response: Incomplete
65+
post_send_single_response: Incomplete
66+
post_send_search: Incomplete
6667
def __init__(
6768
self,
6869
server: Server | str | _ServerSequence | ServerPool,
@@ -86,7 +87,7 @@ class Connection:
8687
auto_referrals: bool = ...,
8788
auto_range: bool = ...,
8889
sasl_mechanism: str | None = ...,
89-
sasl_credentials: Any | None = ...,
90+
sasl_credentials: Incomplete | None = ...,
9091
check_names: bool = ...,
9192
collect_usage: bool = ...,
9293
read_only: bool = ...,
@@ -95,17 +96,17 @@ class Connection:
9596
pool_name: str | None = ...,
9697
pool_size: int | None = ...,
9798
pool_lifetime: int | None = ...,
98-
cred_store: Any | None = ...,
99+
cred_store: Incomplete | None = ...,
99100
fast_decoder: bool = ...,
100-
receive_timeout: Any | None = ...,
101+
receive_timeout: Incomplete | None = ...,
101102
return_empty_attributes: bool = ...,
102103
use_referral_cache: bool = ...,
103104
auto_escape: bool = ...,
104105
auto_encode: bool = ...,
105-
pool_keepalive: Any | None = ...,
106+
pool_keepalive: Incomplete | None = ...,
106107
source_address: str | None = ...,
107108
source_port: int | None = ...,
108-
source_port_list: Any | None = ...,
109+
source_port_list: Incomplete | None = ...,
109110
) -> None: ...
110111
def repr_with_sensitive_data_stripped(self): ...
111112
@property
@@ -118,65 +119,71 @@ class Connection:
118119
def __exit__(
119120
self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None
120121
) -> Literal[False] | None: ...
121-
def bind(self, read_server_info: bool = ..., controls: Any | None = ...): ...
122+
def bind(self, read_server_info: bool = ..., controls: Incomplete | None = ...): ...
122123
def rebind(
123124
self,
124-
user: Any | None = ...,
125-
password: Any | None = ...,
126-
authentication: Any | None = ...,
127-
sasl_mechanism: Any | None = ...,
128-
sasl_credentials: Any | None = ...,
125+
user: Incomplete | None = ...,
126+
password: Incomplete | None = ...,
127+
authentication: Incomplete | None = ...,
128+
sasl_mechanism: Incomplete | None = ...,
129+
sasl_credentials: Incomplete | None = ...,
129130
read_server_info: bool = ...,
130-
controls: Any | None = ...,
131+
controls: Incomplete | None = ...,
131132
): ...
132-
def unbind(self, controls: Any | None = ...): ...
133+
def unbind(self, controls: Incomplete | None = ...): ...
133134
def search(
134135
self,
135136
search_base: str,
136137
search_filter: str,
137138
search_scope: Literal["BASE", "LEVEL", "SUBTREE"] = ...,
138139
dereference_aliases: Literal["NEVER", "SEARCH", "FINDING_BASE", "ALWAYS"] = ...,
139-
attributes: Any | None = ...,
140+
attributes: Incomplete | None = ...,
140141
size_limit: int = ...,
141142
time_limit: int = ...,
142143
types_only: bool = ...,
143144
get_operational_attributes: bool = ...,
144-
controls: Any | None = ...,
145+
controls: Incomplete | None = ...,
145146
paged_size: int | None = ...,
146147
paged_criticality: bool = ...,
147148
paged_cookie: str | bytes | None = ...,
148149
auto_escape: bool | None = ...,
149150
): ...
150-
def compare(self, dn, attribute, value, controls: Any | None = ...): ...
151-
def add(self, dn, object_class: Any | None = ..., attributes: Any | None = ..., controls: Any | None = ...): ...
152-
def delete(self, dn, controls: Any | None = ...): ...
153-
def modify(self, dn, changes, controls: Any | None = ...): ...
151+
def compare(self, dn, attribute, value, controls: Incomplete | None = ...): ...
152+
def add(
153+
self, dn, object_class: Incomplete | None = ..., attributes: Incomplete | None = ..., controls: Incomplete | None = ...
154+
): ...
155+
def delete(self, dn, controls: Incomplete | None = ...): ...
156+
def modify(self, dn, changes, controls: Incomplete | None = ...): ...
154157
def modify_dn(
155-
self, dn, relative_dn, delete_old_dn: bool = ..., new_superior: Any | None = ..., controls: Any | None = ...
158+
self, dn, relative_dn, delete_old_dn: bool = ..., new_superior: Incomplete | None = ..., controls: Incomplete | None = ...
156159
): ...
157-
def abandon(self, message_id, controls: Any | None = ...): ...
160+
def abandon(self, message_id, controls: Incomplete | None = ...): ...
158161
def extended(
159-
self, request_name, request_value: Any | None = ..., controls: Any | None = ..., no_encode: Any | None = ...
162+
self,
163+
request_name,
164+
request_value: Asn1Item | ReadableBuffer | None = ...,
165+
controls: Incomplete | None = ...,
166+
no_encode: bool | None = ...,
160167
): ...
161168
def start_tls(self, read_server_info: bool = ...): ...
162169
def do_sasl_bind(self, controls): ...
163170
def do_ntlm_bind(self, controls): ...
164171
def refresh_server_info(self) -> None: ...
165172
def response_to_ldif(
166173
self,
167-
search_result: Any | None = ...,
174+
search_result: Incomplete | None = ...,
168175
all_base64: bool = ...,
169-
line_separator: Any | None = ...,
170-
sort_order: Any | None = ...,
171-
stream: Any | None = ...,
176+
line_separator: Incomplete | None = ...,
177+
sort_order: Incomplete | None = ...,
178+
stream: Incomplete | None = ...,
172179
): ...
173180
def response_to_json(
174181
self,
175182
raw: bool = ...,
176-
search_result: Any | None = ...,
183+
search_result: Incomplete | None = ...,
177184
indent: int = ...,
178185
sort: bool = ...,
179-
stream: Any | None = ...,
186+
stream: Incomplete | None = ...,
180187
checked_attributes: bool = ...,
181188
include_empty: bool = ...,
182189
): ...
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
from typing import Any
1+
from _typeshed import Incomplete
22

33
from ...extend.operation import ExtendedOperation
4+
from ...protocol.novell import EndGroupTypeRequestValue, EndGroupTypeResponseValue
45

56
class EndTransaction(ExtendedOperation):
67
request_name: str
78
response_name: str
8-
request_value: Any
9-
asn1_spec: Any
9+
request_value: EndGroupTypeRequestValue
10+
asn1_spec: EndGroupTypeResponseValue
1011
def config(self) -> None: ...
11-
def __init__(self, connection, commit: bool = ..., controls: Any | None = ...) -> None: ...
12+
def __init__(self, connection, commit: bool = ..., controls: Incomplete | None = ...) -> None: ...
1213
def populate_result(self) -> None: ...
13-
response_value: Any
14+
response_value: Incomplete
1415
def set_response(self) -> None: ...
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
from typing import Any
2-
31
from ...extend.operation import ExtendedOperation
2+
from ...protocol.novell import Identity
43

54
class GetBindDn(ExtendedOperation):
65
request_name: str
76
response_name: str
87
response_attribute: str
9-
asn1_spec: Any
8+
asn1_spec: Identity
109
def config(self) -> None: ...
1110
def populate_result(self) -> None: ...
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
from typing import Any
1+
from _typeshed import Incomplete
22

33
from ...extend.operation import ExtendedOperation
4+
from ...protocol.novell import ReplicaList
5+
from ...protocol.rfc4511 import LDAPDN
46

57
class ListReplicas(ExtendedOperation):
68
request_name: str
79
response_name: str
8-
request_value: Any
9-
asn1_spec: Any
10+
request_value: LDAPDN
11+
asn1_spec: ReplicaList
1012
response_attribute: str
1113
def config(self) -> None: ...
12-
def __init__(self, connection, server_dn, controls: Any | None = ...) -> None: ...
14+
def __init__(self, connection, server_dn, controls: Incomplete | None = ...) -> None: ...
1315
def populate_result(self) -> None: ...
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
from typing import Any
1+
from _typeshed import Incomplete
22

33
from ...extend.operation import ExtendedOperation
4+
from ...protocol.novell import NmasGetUniversalPasswordRequestValue, NmasGetUniversalPasswordResponseValue
45

56
class NmasGetUniversalPassword(ExtendedOperation):
67
request_name: str
78
response_name: str
8-
request_value: Any
9-
asn1_spec: Any
9+
request_value: NmasGetUniversalPasswordRequestValue
10+
asn1_spec: NmasGetUniversalPasswordResponseValue
1011
response_attribute: str
1112
def config(self) -> None: ...
12-
def __init__(self, connection, user, controls: Any | None = ...) -> None: ...
13+
def __init__(self, connection, user, controls: Incomplete | None = ...) -> None: ...
1314
def populate_result(self) -> None: ...
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
from typing import Any
1+
from _typeshed import Incomplete
22

33
from ...extend.operation import ExtendedOperation
4+
from ...protocol.novell import NmasSetUniversalPasswordRequestValue, NmasSetUniversalPasswordResponseValue
45

56
class NmasSetUniversalPassword(ExtendedOperation):
67
request_name: str
78
response_name: str
8-
request_value: Any
9-
asn1_spec: Any
9+
request_value: NmasSetUniversalPasswordRequestValue
10+
asn1_spec: NmasSetUniversalPasswordResponseValue
1011
response_attribute: str
1112
def config(self) -> None: ...
12-
def __init__(self, connection, user, new_password, controls: Any | None = ...) -> None: ...
13+
def __init__(self, connection, user, new_password, controls: Incomplete | None = ...) -> None: ...
1314
def populate_result(self) -> None: ...
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
from typing import Any
1+
from _typeshed import Incomplete
22

3+
from ...protocol.rfc4511 import LDAPDN
34
from ..operation import ExtendedOperation
45

56
class PartitionEntryCount(ExtendedOperation):
67
request_name: str
78
response_name: str
8-
request_value: Any
9+
request_value: LDAPDN
910
response_attribute: str
1011
def config(self) -> None: ...
11-
def __init__(self, connection, partition_dn, controls: Any | None = ...) -> None: ...
12+
def __init__(self, connection, partition_dn, controls: Incomplete | None = ...) -> None: ...
1213
def populate_result(self) -> None: ...
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
from typing import Any
1+
from _typeshed import Incomplete
22

3+
from ...protocol.novell import ReplicaInfoRequestValue
34
from ..operation import ExtendedOperation
45

56
class ReplicaInfo(ExtendedOperation):
67
request_name: str
78
response_name: str
8-
request_value: Any
9+
request_value: ReplicaInfoRequestValue
910
response_attribute: str
1011
def config(self) -> None: ...
11-
def __init__(self, connection, server_dn, partition_dn, controls: Any | None = ...) -> None: ...
12+
def __init__(self, connection, server_dn, partition_dn, controls: Incomplete | None = ...) -> None: ...
1213
def populate_result(self) -> None: ...
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
from typing import Any
1+
from _typeshed import Incomplete
22

33
from ...extend.operation import ExtendedOperation
4+
from ...protocol.novell import CreateGroupTypeRequestValue, CreateGroupTypeResponseValue
45

56
class StartTransaction(ExtendedOperation):
67
request_name: str
78
response_name: str
8-
request_value: Any
9-
asn1_spec: Any
9+
request_value: CreateGroupTypeRequestValue
10+
asn1_spec: CreateGroupTypeResponseValue
1011
def config(self) -> None: ...
11-
def __init__(self, connection, controls: Any | None = ...) -> None: ...
12+
def __init__(self, connection, controls: Incomplete | None = ...) -> None: ...
1213
def populate_result(self) -> None: ...
13-
response_value: Any
14+
response_value: Incomplete
1415
def set_response(self) -> None: ...

0 commit comments

Comments
 (0)