Skip to content

Commit 1f3c7c4

Browse files
committed
Refactor method definitions to include boto3 documentation links and streamline context manager methods
1 parent 7effa15 commit 1f3c7c4

File tree

6 files changed

+71
-29
lines changed

6 files changed

+71
-29
lines changed

mypy_boto3_builder/parsers/parse_collections.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def parse_collection(
4444
)
4545
self_type = InternalImport(collection_record.name, stringify=True)
4646

47+
# FIXME: other collection methods use different anchor format. This will probably change.
4748
all_method = Method(
4849
name="all",
4950
arguments=(Argument.self(),),
@@ -52,10 +53,7 @@ def parse_collection(
5253
"Get all items from the collection, optionally"
5354
" with a custom page size and item count limit."
5455
),
55-
)
56-
# FIXME: other collection methods use different anchor format. This will probably change.
57-
all_method.set_boto3_doc_link(
58-
f"{collection_record.boto3_doc_link_parent}#{service_name.class_name}.{collection_record.parent_name}.all"
56+
boto3_doc_link=f"{collection_record.boto3_doc_link_parent}#{service_name.class_name}.{collection_record.parent_name}.all",
5957
)
6058

6159
collection_record.methods.append(all_method)

mypy_boto3_builder/postprocessors/aiobotocore.py

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -180,28 +180,31 @@ def _make_async_sub_resources(self) -> None:
180180
)
181181

182182
def _add_contextmanager_methods(self) -> None:
183-
aenter_method = Method(
184-
name="__aenter__",
185-
arguments=(Argument.self(),),
186-
return_type=InternalImport(self.package.client.name),
187-
is_async=True,
188-
docstring=self.package.client.docstring,
189-
)
190-
aenter_method.set_boto3_doc_link(self.package.client.boto3_doc_link)
191-
aexit_method = Method(
192-
name="__aexit__",
193-
arguments=(
194-
Argument.self(),
195-
Argument("exc_type", Type.Any),
196-
Argument("exc_val", Type.Any),
197-
Argument("exc_tb", Type.Any),
198-
),
199-
return_type=Type.Any,
200-
is_async=True,
201-
docstring=self.package.client.docstring,
183+
self.package.client.methods.extend(
184+
(
185+
Method(
186+
name="__aenter__",
187+
arguments=(Argument.self(),),
188+
return_type=InternalImport(self.package.client.name),
189+
is_async=True,
190+
docstring=self.package.client.docstring,
191+
boto3_doc_link=self.package.client.boto3_doc_link,
192+
),
193+
Method(
194+
name="__aexit__",
195+
arguments=(
196+
Argument.self(),
197+
Argument("exc_type", Type.Any),
198+
Argument("exc_val", Type.Any),
199+
Argument("exc_tb", Type.Any),
200+
),
201+
return_type=Type.Any,
202+
is_async=True,
203+
docstring=self.package.client.docstring,
204+
boto3_doc_link=self.package.client.boto3_doc_link,
205+
),
206+
)
202207
)
203-
aexit_method.set_boto3_doc_link(self.package.client.boto3_doc_link)
204-
self.package.client.methods.extend((aenter_method, aexit_method))
205208

206209
def _iterate_types_shallow(self) -> Iterator[FakeAnnotation]:
207210
yield from self.package.client.iterate_types()

mypy_boto3_builder/structures/client.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def get_exceptions_property(self) -> Method:
109109
"""
110110
Generate Client exceptions property.
111111
"""
112-
method = Method(
112+
return Method(
113113
name="exceptions",
114114
decorators=[ExternalImport.from_class(property)],
115115
arguments=[
@@ -122,9 +122,8 @@ def get_exceptions_property(self) -> Method:
122122
stringify=False,
123123
),
124124
docstring=f"{self.name} exceptions.",
125+
boto3_doc_link=self.boto3_doc_link,
125126
)
126-
method.set_boto3_doc_link(self.boto3_doc_link)
127-
return method
128127

129128
def get_required_import_records(self) -> set[ImportRecord]:
130129
"""

mypy_boto3_builder/structures/function.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ def __init__(
3030
body_lines: Iterable[str] = (),
3131
type_ignore: bool = False,
3232
is_async: bool = False,
33+
boto3_doc_link: str = "",
3334
) -> None:
3435
self.name = name
3536
self.arguments = list(arguments)
@@ -40,7 +41,7 @@ def __init__(
4041
self.type_ignore = type_ignore
4142
self.request_type_annotation: TypeTypedDict | None = None
4243
self.is_async = is_async
43-
self._boto3_doc_link = ""
44+
self._boto3_doc_link = boto3_doc_link
4445

4546
@property
4647
def boto3_doc_link(self) -> str:

tests/structures/test_method.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,13 @@ def setup_method(self) -> None:
1919
return_type=Type.none,
2020
body_lines=["line1", "line2"],
2121
docstring="docstring\n\nlong",
22+
boto3_doc_link="boto3://doc.link",
2223
)
2324

25+
def test_set_boto3_doc_link(self) -> None:
26+
self.method.set_boto3_doc_link("new")
27+
assert self.method.boto3_doc_link == "new"
28+
2429
def test_is_kw_only(self) -> None:
2530
assert self.method.is_kw_only() is False
2631

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from mypy_boto3_builder.package_data import Boto3StubsPackageData
2+
from mypy_boto3_builder.structures.package_url import PackageURL
3+
4+
5+
class TestPackageURL:
6+
package_url: PackageURL
7+
8+
def setup_method(self) -> None:
9+
self.package_url = PackageURL("name", Boto3StubsPackageData)
10+
11+
def test_init(self) -> None:
12+
assert self.package_url.pypi_name == "name"
13+
assert self.package_url.data == Boto3StubsPackageData
14+
15+
assert self.package_url.pypi_badge == "https://img.shields.io/pypi/v/name.svg?color=blue"
16+
assert (
17+
self.package_url.pyversions_badge
18+
== "https://img.shields.io/pypi/pyversions/name.svg?color=blue"
19+
)
20+
assert (
21+
self.package_url.rtd_badge
22+
== "https://img.shields.io/readthedocs/boto3-stubs.svg?color=blue"
23+
)
24+
assert self.package_url.pepy_badge == "https://static.pepy.tech/badge/name"
25+
assert (
26+
self.package_url.montly_downloads_badge
27+
== "https://img.shields.io/pypi/dm/name?color=blue"
28+
)
29+
assert self.package_url.pypi == "https://pypi.org/project/name/"
30+
assert self.package_url.library_pypi == "https://pypi.org/project/boto3/"
31+
assert self.package_url.stubs_pypi == "https://pypi.org/project/boto3-stubs/"
32+
assert self.package_url.stubs_lite_pypi == "https://pypi.org/project/boto3-stubs-lite/"
33+
assert self.package_url.stubs_full_pypi == "https://pypi.org/project/boto3-stubs-full/"
34+
assert self.package_url.pepy == "https://pepy.tech/project/name"
35+
assert self.package_url.pypistats == "https://pypistats.org/packages/name"
36+
assert self.package_url.docs == "https://youtype.github.io/boto3_stubs_docs/"

0 commit comments

Comments
 (0)