Skip to content

Commit 4a2122d

Browse files
Merge pull request #295 from stac-utils/mah/faster_generate_subcats
faster generate_subcatalogs
2 parents a29705f + 7daeb60 commit 4a2122d

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

pystac/catalog.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -557,15 +557,19 @@ def generate_subcatalogs(self, template, defaults=None, parent_ids=None, **kwarg
557557

558558
layout_template = LayoutTemplate(template, defaults=defaults)
559559

560-
items = list(self.get_items())
561-
for item in items:
560+
keep_item_links = []
561+
item_links = [lk for lk in self.links if lk.rel == 'item']
562+
for link in item_links:
563+
link.resolve_stac_object(root=self.get_root())
564+
item = link.target
562565
item_parts = layout_template.get_template_values(item)
563566
id_iter = reversed(parent_ids)
564567
if all(['{}'.format(id) == next(id_iter, None)
565568
for id in reversed(item_parts.values())]):
566569
# Skip items for which the sub-catalog structure already
567570
# matches the template. The list of parent IDs can include more
568571
# elements on the root side, so compare the reversed sequences.
572+
keep_item_links.append(link)
569573
continue
570574
curr_parent = self
571575
for k, v in item_parts.items():
@@ -578,13 +582,17 @@ def generate_subcatalogs(self, template, defaults=None, parent_ids=None, **kwarg
578582
curr_parent.add_child(subcat)
579583
result.append(subcat)
580584
curr_parent = subcat
581-
self.remove_item(item.id)
585+
582586
# resolve collection link so when added back points to correct location
583587
link = item.get_single_link('collection')
584588
if link is not None:
585589
link.resolve_stac_object()
590+
586591
curr_parent.add_item(item)
587592

593+
# keep only non-item links and item links that have not been moved elsewhere
594+
self.links = [lk for lk in self.links if lk.rel != 'item'] + keep_item_links
595+
588596
return result
589597

590598
def save(self, catalog_type=None):

0 commit comments

Comments
 (0)