Skip to content

Commit 3c4f714

Browse files
authored
[ENH] use macros for filename templates (#536)
* use files for templates * fix
1 parent 2cf8af9 commit 3c4f714

File tree

12 files changed

+83
-767
lines changed

12 files changed

+83
-767
lines changed

.remarkignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
docs/collaboration/bids_github/
22
docs/datasets/index.md
3-
docs/getting_started/folders_and_files/files.md
43
docs/specification/macros_doc.md

docs/faq/bids-extensions.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# BIDS extensions
2+
13
## Can we introduce new entities / metadata in a BEP?
24

35
> We need to introduce an entity to distinguish on-device preprocessing methods

docs/faq/eeg.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# EEG
2+
13
## How to format Hardware and Software filter fields in a .json?
24

35
In the modality specific sidecar file `_eeg.json`, we can specify the software

docs/faq/mri.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# MRI
2+
13
## I only have nifti files and no dicom. Can I still create a BIDS dataset?
24

35
In theory yes, but it is possible that you will be missing some metadata that is required by the BIDS specification.

docs/getting_started/folders_and_files/files.md

Lines changed: 1 addition & 680 deletions
Large diffs are not rendered by default.

macros/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
generate_apps_table,
33
generate_beps_table,
44
generate_converter_table,
5+
generate_filename_templates,
56
generate_grants_table,
67
generate_members_table,
78
generate_tools_table,
@@ -18,4 +19,5 @@
1819
"generate_grants_table",
1920
"generate_apps_table",
2021
"generate_working_groups_table",
22+
"generate_filename_templates",
2123
]

macros/macros.py

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from pathlib import Path
22

33
import ruamel.yaml
4+
from bidsschematools import render, schema
45
from jinja2 import Environment, FileSystemLoader, select_autoescape
6+
from rich import print
57

68
yaml = ruamel.yaml.YAML()
79
yaml.indent(mapping=2, sequence=4, offset=2)
@@ -78,8 +80,51 @@ def generate_apps_table():
7880
return template.render(include=content, type=type)
7981

8082

83+
def generate_filename_templates():
84+
"""Create filename templates for all datatypes of all modalities."""
85+
86+
schema_obj = schema.load_schema()
87+
88+
modalities = schema_obj.rules.modalities
89+
90+
to_render = [
91+
{
92+
"name": x,
93+
"description": schema_obj.objects.modalities[x]["description"],
94+
"datatypes": [
95+
{
96+
"name": dt,
97+
"filenames": filename_template_for(schema_obj, dt),
98+
}
99+
for dt in modalities[x]["datatypes"]
100+
],
101+
}
102+
for x in modalities
103+
]
104+
105+
env = return_jinja_env()
106+
template = env.get_template("filename_templates_md.jinja")
107+
return template.render(include=to_render)
108+
109+
110+
def filename_template_for(schema_obj, datatype):
111+
"""Create filename templates for a single datatype."""
112+
filenames = render.make_filename_template(
113+
dstype="raw",
114+
schema=schema_obj,
115+
src_path=Path("https://bids-specification.readthedocs.io/en/latest/"),
116+
pdf_format=False,
117+
datatypes=[datatype],
118+
)
119+
filenames = filenames.replace(
120+
"../../..",
121+
"https://bids-specification.readthedocs.io/en/latest",
122+
)
123+
return filenames
124+
125+
81126
def main():
82-
print(generate_converter_table(file="converters.yml", data_type="EEG"))
127+
print(generate_filename_templates())
83128

84129

85130
if __name__ == "__main__":

macros/main.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,7 @@ def define_env(env):
4141
macros.generate_working_groups_table,
4242
"MACROS___generate_working_groups_table",
4343
)
44+
env.macro(
45+
macros.generate_filename_templates,
46+
"MACROS___generate_filename_templates",
47+
)

requirements.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ rich
1212
ruamel.yaml
1313
tabulate
1414
pyzotero
15-
file:specification/tools/schemacode
15+
bidsschematools[render]
1616
-e file:tools

requirements.txt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ bibtexparser==1.4.1
1818
# via pyzotero
1919
bids-validator==1.14.6
2020
# via pybids
21-
file:specification/tools/schemacode
21+
bidsschematools==0.11.3
2222
# via -r requirements.in
2323
cairocffi==1.7.0
2424
# via cairosvg
@@ -90,7 +90,9 @@ markdown==3.6
9090
# mkdocs-material
9191
# pymdown-extensions
9292
markdown-it-py==3.0.0
93-
# via -r requirements.in
93+
# via
94+
# -r requirements.in
95+
# bidsschematools
9496
markupsafe==2.1.5
9597
# via
9698
# jinja2
@@ -148,6 +150,7 @@ paginate==0.5.6
148150
# via mkdocs-material
149151
pandas==2.2.2
150152
# via
153+
# bidsschematools
151154
# formulaic
152155
# pybids
153156
# seaborn
@@ -233,7 +236,9 @@ smmap==5.0.1
233236
sqlalchemy==2.0.30
234237
# via pybids
235238
tabulate==0.9.0
236-
# via -r requirements.in
239+
# via
240+
# -r requirements.in
241+
# bidsschematools
237242
tenacity==8.4.1
238243
# via plotly
239244
termcolor==2.4.0

0 commit comments

Comments
 (0)