Skip to content

Commit 0e7b9bf

Browse files
committed
Confluence: add get all pages as Generator method
1 parent e5c6ba2 commit 0e7b9bf

File tree

3 files changed

+77
-18
lines changed

3 files changed

+77
-18
lines changed

atlassian/confluence.py

+73-17
Original file line numberDiff line numberDiff line change
@@ -647,24 +647,80 @@ def get_all_pages_from_space(
647647
content_type="page",
648648
):
649649
"""
650-
Get all pages from space
650+
Retrieve all pages from a Confluence space.
651651
652-
:param space:
653-
:param start: OPTIONAL: The start point of the collection to return. Default: None (0).
654-
:param limit: OPTIONAL: The limit of the number of pages to return, this may be restricted by
655-
fixed system limits. Default: 50
656-
:param status: OPTIONAL: list of statuses the content to be found is in.
657-
Defaults to current is not specified.
658-
If set to 'any', content in 'current' and 'trashed' status will be fetched.
659-
Does not support 'historical' status for now.
660-
:param expand: OPTIONAL: a comma separated list of properties to expand on the content.
661-
Default value: history,space,version.
662-
:param content_type: the content type to return. Default value: page. Valid values: page, blogpost.
663-
:return:
652+
:param space: The space key to fetch pages from.
653+
:param start: OPTIONAL: The starting point of the collection. Default: 0.
654+
:param limit: OPTIONAL: The maximum number of pages per request. Default: 50.
655+
:param status: OPTIONAL: Filter pages by status ('current', 'trashed', 'any'). Default: None.
656+
:param expand: OPTIONAL: Comma-separated list of properties to expand. Default: history,space,version.
657+
:param content_type: OPTIONAL: The content type to return ('page', 'blogpost'). Default: page.
658+
:return: List containing all pages from the specified space.
664659
"""
665-
return self.get_all_pages_from_space_raw(
666-
space=space, start=start, limit=limit, status=status, expand=expand, content_type=content_type
667-
).get("results")
660+
all_pages = [] # Initialize an empty list to store all pages
661+
while True:
662+
# Fetch a single batch of pages
663+
response = self.get_all_pages_from_space_raw(
664+
space=space,
665+
start=start,
666+
limit=limit,
667+
status=status,
668+
expand=expand,
669+
content_type=content_type,
670+
)
671+
672+
# Extract results from the response
673+
results = response.get("results", [])
674+
all_pages.extend(results) # Add the current batch of pages to the list
675+
676+
# Break the loop if no more pages are available
677+
if len(results) < limit:
678+
break
679+
680+
# Increment the start index for the next batch
681+
start += limit
682+
return all_pages
683+
684+
def get_all_pages_from_space_as_generator(
685+
self,
686+
space,
687+
start=0,
688+
limit=50,
689+
status=None,
690+
expand="history,space,version",
691+
content_type="page",
692+
):
693+
"""
694+
Retrieve all pages from a Confluence space using pagination.
695+
696+
:param space: The space key to fetch pages from.
697+
:param start: OPTIONAL: The starting point of the collection. Default: 0.
698+
:param limit: OPTIONAL: The maximum number of pages per request. Default: 50.
699+
:param status: OPTIONAL: Filter pages by status ('current', 'trashed', 'any'). Default: None.
700+
:param expand: OPTIONAL: Comma-separated list of properties to expand. Default: history,space,version.
701+
:param content_type: OPTIONAL: The content type to return ('page', 'blogpost'). Default: page.
702+
:return: Generator yielding pages one by one.
703+
"""
704+
while True:
705+
# Fetch a single batch of pages
706+
response = self.get_all_pages_from_space_raw(
707+
space=space,
708+
start=start,
709+
limit=limit,
710+
status=status,
711+
expand=expand,
712+
content_type=content_type,
713+
)
714+
715+
# Extract results from the response
716+
results = response.get("results", [])
717+
yield from results # Yield each page individually
718+
719+
# Break the loop if no more pages are available
720+
if len(results) < limit:
721+
break
722+
start += limit
723+
pass
668724

669725
def get_all_pages_from_space_trash(self, space, start=0, limit=500, status="trashed", content_type="page"):
670726
"""
@@ -1238,7 +1294,7 @@ def remove_template(self, template_id):
12381294
def get_all_spaces(
12391295
self,
12401296
start=0,
1241-
limit=500,
1297+
limit=50,
12421298
expand=None,
12431299
space_type=None,
12441300
space_status=None,

atlassian/jira.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ def request_current_index_from_node(self, node_id: T_id) -> T_resp_json:
470470
return self.put(url)
471471

472472
"""
473-
Troubleshooting. (Available for DC) It gives the posibility to download support zips.
473+
Troubleshooting. (Available for DC) It gives the possibility to download support zips.
474474
Reference: https://confluence.atlassian.com/support/create-a-support-zip-using-the-rest-api-in-data-center-applications-952054641.html
475475
"""
476476

docs/confluence.rst

+3
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ Get page info
5151
# max limit is 100. For more you have to loop over start values.
5252
confluence.get_all_pages_from_space(space, start=0, limit=100, status=None, expand=None, content_type='page')
5353
54+
# Get all pages from space as Generator
55+
confluence.get_all_pages_from_space_as_generator(space, start=0, limit=100, status=None, expand=None, content_type='page')
56+
5457
# Get list of pages from trash
5558
confluence.get_all_pages_from_space_trash(space, start=0, limit=500, status='trashed', content_type='page')
5659

0 commit comments

Comments
 (0)