4
4
import warnings
5
5
import yaml
6
6
7
+ from fnmatch import fnmatchcase
7
8
from griffe .loader import GriffeLoader
8
9
from griffe .collections import ModulesCollection , LinesCollection
9
10
from griffe .dataclasses import Alias
@@ -375,7 +376,7 @@ def __init__(
375
376
renderer : "dict | Renderer | str" = "markdown" ,
376
377
out_index : str = None ,
377
378
sidebar : "str | None" = None ,
378
- rewrite_all_pages = True ,
379
+ rewrite_all_pages = False ,
379
380
):
380
381
self .layout = self .load_layout (sections = sections , package = package )
381
382
@@ -400,8 +401,16 @@ def load_layout(self, sections: dict, package: str):
400
401
401
402
# building ----------------------------------------------------------------
402
403
403
- def build (self ):
404
- """Build index page, sphinx inventory, and individual doc pages."""
404
+ def build (self , filter : str = "*" ):
405
+ """Build index page, sphinx inventory, and individual doc pages.
406
+
407
+ Parameters
408
+ ----------
409
+ filter:
410
+ A simple pattern, that may include * as a wildcard. If specified,
411
+ only doc paths for objects with matching names will be written.
412
+ Path is the file's base name in the API dir (e.g. MdRenderer.render)
413
+ """
405
414
406
415
from quartodoc import blueprint , collect
407
416
@@ -419,7 +428,7 @@ def build(self):
419
428
self .write_index (blueprint )
420
429
421
430
_log .info ("Writing docs pages" )
422
- self .write_doc_pages (pages )
431
+ self .write_doc_pages (pages , filter )
423
432
424
433
# inventory ----
425
434
@@ -448,7 +457,7 @@ def write_index(self, blueprint: layout.Layout):
448
457
449
458
return str (p_index )
450
459
451
- def write_doc_pages (self , pages ):
460
+ def write_doc_pages (self , pages , filter : str ):
452
461
"""Write individual function documentation pages."""
453
462
454
463
for page in pages :
@@ -460,13 +469,24 @@ def write_doc_pages(self, pages):
460
469
# Only write out page if it has changed, or we've set the
461
470
# rewrite_all_pages option. This ensures that quarto won't have
462
471
# to re-render every page of the API all the time.
472
+ if filter != "*" :
473
+ is_match = fnmatchcase (page .path , filter )
474
+
475
+ if is_match :
476
+ _log .info ("Matched filter" )
477
+ else :
478
+ _log .info ("Skipping write (no filter match)" )
479
+ continue
480
+
463
481
if (
464
482
self .rewrite_all_pages
465
483
or (not html_path .exists ())
466
484
or (html_path .read_text () != rendered )
467
485
):
468
- _log .info (f"Writing { page .path } " )
486
+ _log .info (f"Writing: { page .path } " )
469
487
html_path .write_text (rendered )
488
+ else :
489
+ _log .info ("Skipping write (content unchanged)" )
470
490
471
491
# inventory ----
472
492
0 commit comments