Skip to content

Commit 7987324

Browse files
committed
docs: Improve API doc groups
Closes: #508
1 parent c75520a commit 7987324

File tree

10 files changed

+168
-38
lines changed

10 files changed

+168
-38
lines changed

src/apify/_actor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454

5555

5656
@docs_name('Actor')
57-
@docs_group('Classes')
57+
@docs_group('Actor')
5858
class _ActorType:
5959
"""The class of `Actor`. Only make a new instance if you're absolutely sure you need to."""
6060

src/apify/_charging.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
run_validator = TypeAdapter[ActorRun | None](ActorRun | None)
2727

2828

29-
@docs_group('Interfaces')
29+
@docs_group('Charging')
3030
class ChargingManager(Protocol):
3131
"""Provides fine-grained access to pay-per-event functionality."""
3232

@@ -57,7 +57,7 @@ def get_pricing_info(self) -> ActorPricingInfo:
5757
"""
5858

5959

60-
@docs_group('Data structures')
60+
@docs_group('Charging')
6161
@dataclass(frozen=True)
6262
class ChargeResult:
6363
"""Result of the `ChargingManager.charge` method."""
@@ -72,7 +72,7 @@ class ChargeResult:
7272
"""How many events of each known type can still be charged within the limit."""
7373

7474

75-
@docs_group('Data structures')
75+
@docs_group('Charging')
7676
@dataclass
7777
class ActorPricingInfo:
7878
"""Result of the `ChargingManager.get_pricing_info` method."""

src/apify/_configuration.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def _transform_to_list(value: Any) -> list[str] | None:
2525
return value if isinstance(value, list) else str(value).split(',')
2626

2727

28-
@docs_group('Classes')
28+
@docs_group('Configuration')
2929
class Configuration(CrawleeConfiguration):
3030
"""A class for specifying the configuration of an Actor.
3131

src/apify/_models.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from typing import TypeAlias
1717

1818

19-
@docs_group('Data structures')
19+
@docs_group('Actor')
2020
class Webhook(BaseModel):
2121
__model_config__ = ConfigDict(populate_by_name=True)
2222

@@ -35,14 +35,14 @@ class Webhook(BaseModel):
3535
] = None
3636

3737

38-
@docs_group('Data structures')
38+
@docs_group('Actor')
3939
class ActorRunMeta(BaseModel):
4040
__model_config__ = ConfigDict(populate_by_name=True)
4141

4242
origin: Annotated[MetaOrigin, Field()]
4343

4444

45-
@docs_group('Data structures')
45+
@docs_group('Actor')
4646
class ActorRunStats(BaseModel):
4747
__model_config__ = ConfigDict(populate_by_name=True)
4848

@@ -63,7 +63,7 @@ class ActorRunStats(BaseModel):
6363
compute_units: Annotated[float, Field(alias='computeUnits')]
6464

6565

66-
@docs_group('Data structures')
66+
@docs_group('Actor')
6767
class ActorRunOptions(BaseModel):
6868
__model_config__ = ConfigDict(populate_by_name=True)
6969

@@ -74,7 +74,7 @@ class ActorRunOptions(BaseModel):
7474
max_total_charge_usd: Annotated[Decimal | None, Field(alias='maxTotalChargeUsd')] = None
7575

7676

77-
@docs_group('Data structures')
77+
@docs_group('Actor')
7878
class ActorRunUsage(BaseModel):
7979
__model_config__ = ConfigDict(populate_by_name=True)
8080

@@ -92,7 +92,7 @@ class ActorRunUsage(BaseModel):
9292
proxy_serps: Annotated[float | None, Field(alias='PROXY_SERPS')] = None
9393

9494

95-
@docs_group('Data structures')
95+
@docs_group('Actor')
9696
class ActorRun(BaseModel):
9797
__model_config__ = ConfigDict(populate_by_name=True)
9898

src/apify/_platform_event_manager.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,10 @@
2727

2828
from apify._configuration import Configuration
2929

30-
3130
__all__ = ['EventManager', 'LocalEventManager', 'PlatformEventManager']
3231

3332

34-
@docs_group('Data structures')
35-
class PersistStateEvent(BaseModel):
36-
name: Literal[Event.PERSIST_STATE]
37-
data: Annotated[EventPersistStateData, Field(default_factory=lambda: EventPersistStateData(is_migrating=False))]
38-
39-
40-
@docs_group('Data structures')
33+
@docs_group('Event data')
4134
class SystemInfoEventData(BaseModel):
4235
mem_avg_bytes: Annotated[float, Field(alias='memAvgBytes')]
4336
mem_current_bytes: Annotated[float, Field(alias='memCurrentBytes')]
@@ -64,31 +57,37 @@ def to_crawlee_format(self, dedicated_cpus: float) -> EventSystemInfoData:
6457
)
6558

6659

67-
@docs_group('Data structures')
60+
@docs_group('Events')
61+
class PersistStateEvent(BaseModel):
62+
name: Literal[Event.PERSIST_STATE]
63+
data: Annotated[EventPersistStateData, Field(default_factory=lambda: EventPersistStateData(is_migrating=False))]
64+
65+
66+
@docs_group('Events')
6867
class SystemInfoEvent(BaseModel):
6968
name: Literal[Event.SYSTEM_INFO]
7069
data: SystemInfoEventData
7170

7271

73-
@docs_group('Data structures')
72+
@docs_group('Events')
7473
class MigratingEvent(BaseModel):
7574
name: Literal[Event.MIGRATING]
7675
data: Annotated[EventMigratingData, Field(default_factory=EventMigratingData)]
7776

7877

79-
@docs_group('Data structures')
78+
@docs_group('Events')
8079
class AbortingEvent(BaseModel):
8180
name: Literal[Event.ABORTING]
8281
data: Annotated[EventAbortingData, Field(default_factory=EventAbortingData)]
8382

8483

85-
@docs_group('Data structures')
84+
@docs_group('Events')
8685
class ExitEvent(BaseModel):
8786
name: Literal[Event.EXIT]
8887
data: Annotated[EventExitData, Field(default_factory=EventExitData)]
8988

9089

91-
@docs_group('Data structures')
90+
@docs_group('Events')
9291
class EventWithoutData(BaseModel):
9392
name: Literal[
9493
Event.SESSION_RETIRED,
@@ -101,13 +100,13 @@ class EventWithoutData(BaseModel):
101100
data: Any = None
102101

103102

104-
@docs_group('Data structures')
103+
@docs_group('Events')
105104
class DeprecatedEvent(BaseModel):
106105
name: Literal['cpuInfo']
107106
data: Annotated[dict[str, Any], Field(default_factory=dict)]
108107

109108

110-
@docs_group('Data structures')
109+
@docs_group('Events')
111110
class UnknownEvent(BaseModel):
112111
name: str
113112
data: Annotated[dict[str, Any], Field(default_factory=dict)]
@@ -120,7 +119,7 @@ class UnknownEvent(BaseModel):
120119
)
121120

122121

123-
@docs_group('Classes')
122+
@docs_group('Event managers')
124123
class PlatformEventManager(EventManager):
125124
"""A class for managing Actor events.
126125

src/apify/_proxy_configuration.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def _check(
6969
raise ValueError(f'{error_str} does not match pattern {pattern.pattern!r}')
7070

7171

72-
@docs_group('Classes')
72+
@docs_group('Configuration')
7373
@dataclass
7474
class ProxyInfo(CrawleeProxyInfo):
7575
"""Provides information about a proxy connection that is used for requests."""
@@ -89,7 +89,7 @@ class ProxyInfo(CrawleeProxyInfo):
8989
"""
9090

9191

92-
@docs_group('Classes')
92+
@docs_group('Configuration')
9393
class ProxyConfiguration(CrawleeProxyConfiguration):
9494
"""Configures a connection to a proxy server with the provided options.
9595

src/apify/_utils.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,19 @@ def is_running_in_ipython() -> bool:
3030
return getattr(builtins, '__IPYTHON__', False)
3131

3232

33-
GroupName = Literal['Classes', 'Abstract classes', 'Interfaces', 'Data structures', 'Errors', 'Functions']
33+
# The order of the rendered API groups is defined in the website/docusaurus.config.js file.
34+
GroupName = Literal[
35+
'Actor',
36+
'Charging',
37+
'Configuration',
38+
'Event managers',
39+
'Events',
40+
'Event data',
41+
'Request loaders',
42+
'Storage clients',
43+
'Storage data',
44+
'Storages',
45+
]
3446

3547

3648
def docs_group(group_name: GroupName) -> Callable: # noqa: ARG001

src/apify/apify_storage_client/_apify_storage_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from apify._configuration import Configuration
2121

2222

23-
@docs_group('Classes')
23+
@docs_group('Storage clients')
2424
class ApifyStorageClient(StorageClient):
2525
"""A storage client implementation based on the Apify platform storage."""
2626

src/apify/storages/_request_list.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class _SimpleUrlInput(_RequestDetails):
3838
url_input_adapter = TypeAdapter(list[_RequestsFromUrlInput | _SimpleUrlInput])
3939

4040

41-
@docs_group('Classes')
41+
@docs_group('Request loaders')
4242
class RequestList(CrawleeRequestList):
4343
"""Extends crawlee RequestList.
4444

website/docusaurus.config.js

Lines changed: 125 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@ const { config } = require('@apify/docs-theme');
55
const { externalLinkProcessor } = require('./tools/utils/externalLink');
66

77
const GROUP_ORDER = [
8-
'Classes',
9-
'Data structures',
8+
'Actor',
9+
'Charging',
10+
'Configuration',
11+
'Event managers',
12+
'Events',
13+
'Event data',
14+
'Request loaders',
15+
'Storage clients',
16+
'Storage data',
17+
'Storages',
1018
];
1119

1220
const groupSort = (g1, g2) => {
@@ -112,21 +120,132 @@ module.exports = {
112120
moduleShortcutsPath: path.join(__dirname, '/module_shortcuts.json'),
113121
},
114122
reexports: [
123+
// Storages
124+
{
125+
url: 'https://crawlee.dev/python/api/class/Storage',
126+
group: 'Storages',
127+
},
115128
{
116129
url: 'https://crawlee.dev/python/api/class/Dataset',
117-
group: 'Classes',
130+
group: 'Storages',
118131
},
119132
{
120133
url: 'https://crawlee.dev/python/api/class/KeyValueStore',
121-
group: 'Classes',
134+
group: 'Storages',
122135
},
123136
{
124137
url: 'https://crawlee.dev/python/api/class/RequestQueue',
125-
group: 'Classes',
138+
group: 'Storages',
139+
},
140+
// Storage data
141+
{
142+
url: 'https://crawlee.dev/python/api/class/AddRequestsResponse',
143+
group: 'Storage data',
144+
},
145+
{
146+
url: 'https://crawlee.dev/python/api/class/DatasetItemsListPage',
147+
group: 'Storage data',
148+
},
149+
{
150+
url: 'https://crawlee.dev/python/api/class/DatasetMetadata',
151+
group: 'Storage data',
152+
},
153+
{
154+
url: 'https://crawlee.dev/python/api/class/KeyValueStoreMetadata',
155+
group: 'Storage data',
156+
},
157+
{
158+
url: 'https://crawlee.dev/python/api/class/KeyValueStoreRecord',
159+
group: 'Storage data',
160+
},
161+
{
162+
url: 'https://crawlee.dev/python/api/class/KeyValueStoreRecordMetadata',
163+
group: 'Storage data',
164+
},
165+
{
166+
url: 'https://crawlee.dev/python/api/class/ProcessedRequest',
167+
group: 'Storage data',
126168
},
127169
{
128170
url: 'https://crawlee.dev/python/api/class/Request',
129-
group: 'Classes',
171+
group: 'Storage data',
172+
},
173+
{
174+
url: 'https://crawlee.dev/python/api/class/RequestQueueMetadata',
175+
group: 'Storage data',
176+
},
177+
{
178+
url: 'https://crawlee.dev/python/api/class/StorageMetadata',
179+
group: 'Storage data',
180+
},
181+
{
182+
url: 'https://crawlee.dev/python/api/class/ReqUnprocessedRequestuest',
183+
group: 'Storage data',
184+
},
185+
// Event managers
186+
{
187+
url: 'https://crawlee.dev/python/api/class/EventManager',
188+
group: 'Event managers',
189+
},
190+
{
191+
url: 'https://crawlee.dev/python/api/class/LocalEventManager',
192+
group: 'Event managers',
193+
},
194+
// Events
195+
{
196+
url: 'https://crawlee.dev/python/api/enum/Event',
197+
group: 'Events',
198+
},
199+
// Event data
200+
{
201+
url: 'https://crawlee.dev/python/api/class/EventAbortingData',
202+
group: 'Event data',
203+
},
204+
{
205+
url: 'https://crawlee.dev/python/api/class/EventExitData',
206+
group: 'Event data',
207+
},
208+
{
209+
url: 'https://crawlee.dev/python/api/class/EventMigratingData',
210+
group: 'Event data',
211+
},
212+
{
213+
url: 'https://crawlee.dev/python/api/class/EventPersistStateData',
214+
group: 'Event data',
215+
},
216+
{
217+
url: 'https://crawlee.dev/python/api/class/EventSystemInfoData',
218+
group: 'Event data',
219+
},
220+
// Storage clients
221+
{
222+
url: 'https://crawlee.dev/python/api/class/StorageClient',
223+
group: 'Storage clients',
224+
},
225+
{
226+
url: 'https://crawlee.dev/python/api/class/MemoryStorageClient',
227+
group: 'Storage clients',
228+
},
229+
{
230+
url: 'https://crawlee.dev/python/api/class/FileSystemStorageClient',
231+
group: 'Storage clients',
232+
},
233+
// Request loaders
234+
{
235+
url: 'https://crawlee.dev/python/api/class/RequestLoader',
236+
group: 'Request loaders',
237+
},
238+
{
239+
url: 'https://crawlee.dev/python/api/class/RequestManager',
240+
group: 'Request loaders',
241+
},
242+
{
243+
url: 'https://crawlee.dev/python/api/class/RequestManagerTandem',
244+
group: 'Request loaders',
245+
},
246+
{
247+
url: 'https://crawlee.dev/python/api/class/SitemapRequestLoader',
248+
group: 'Request loaders',
130249
},
131250
],
132251
},

0 commit comments

Comments
 (0)