Skip to content

Commit ec7d1cf

Browse files
authored
PR: Explicit Versions (#50)
* Raise package version to 0.2.0. Closes #47. Signed-off-by: Thomas Mansencal <thomas.mansencal@gmail.com> * Add "opencolorio_config_aces.version_aces_dev" definition that returns the current "aces-dev" version. Signed-off-by: Thomas Mansencal <thomas.mansencal@gmail.com> * Implement support for version in filenames and config name attributes. Signed-off-by: Thomas Mansencal <thomas.mansencal@gmail.com> * Fix incorrect assertion message. Signed-off-by: Thomas Mansencal <thomas.mansencal@gmail.com> * Address code review notes. Signed-off-by: Thomas Mansencal <thomas.mansencal@gmail.com> * Shorten configs basename. Signed-off-by: Thomas Mansencal <thomas.mansencal@gmail.com>
1 parent 4d795e8 commit ec7d1cf

19 files changed

+599
-136
lines changed

docs/opencolorio_config_aces.config.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ Reference Configuration
5454
.. autosummary::
5555
:toctree: generated/
5656

57+
version_aces_dev
5758
classify_aces_ctl_transforms
5859
discover_aces_ctl_transforms
5960
filter_ctl_transforms
@@ -88,6 +89,7 @@ Reference Configuration
8889
:toctree: generated/
8990

9091
ColorspaceDescriptionStyle
92+
version_config_mapping_file
9193
generate_config_aces
9294

9395
*ACES* Computer Graphics (CG) Config Generator

docs/opencolorio_config_aces.utilities.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@ Common
3131
is_iterable
3232
git_describe
3333
matrix_3x3_to_4x4
34-
multi_replace
34+
multi_replace
35+
regularise_version

opencolorio_config_aces/__init__.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
plot_aces_conversion_graph,
5353
print_aces_taxonomy,
5454
unclassify_ctl_transforms,
55+
version_aces_dev,
56+
version_config_mapping_file,
5557
)
5658
from .config import (
5759
ColorspaceDescriptionStyle,
@@ -106,6 +108,8 @@
106108
"plot_aces_conversion_graph",
107109
"print_aces_taxonomy",
108110
"unclassify_ctl_transforms",
111+
"version_aces_dev",
112+
"version_config_mapping_file",
109113
]
110114
__all__ += [
111115
"ColorspaceDescriptionStyle",
@@ -124,8 +128,8 @@
124128
__application_name__ = "OpenColorIO Configuration for ACES"
125129

126130
__major_version__ = "0"
127-
__minor_version__ = "1"
128-
__change_version__ = "1"
131+
__minor_version__ = "2"
132+
__change_version__ = "0"
129133
__version__ = ".".join(
130134
(__major_version__, __minor_version__, __change_version__)
131135
) # yapf: disable

opencolorio_config_aces/config/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
plot_aces_conversion_graph,
3434
print_aces_taxonomy,
3535
unclassify_ctl_transforms,
36+
version_aces_dev,
37+
version_config_mapping_file,
3638
)
3739
from .reference import (
3840
ColorspaceDescriptionStyle,
@@ -72,6 +74,8 @@
7274
"plot_aces_conversion_graph",
7375
"print_aces_taxonomy",
7476
"unclassify_ctl_transforms",
77+
"version_aces_dev",
78+
"version_config_mapping_file",
7579
]
7680
__all__ += [
7781
"ColorspaceDescriptionStyle",

opencolorio_config_aces/config/cg/generate/config.py

Lines changed: 141 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import csv
1414
import logging
15+
1516
import PyOpenColorIO as ocio
1617
from collections import defaultdict
1718
from datetime import datetime
@@ -29,9 +30,11 @@
2930
)
3031
from opencolorio_config_aces.config.reference import (
3132
ColorspaceDescriptionStyle,
33+
version_aces_dev,
34+
version_config_mapping_file,
3235
generate_config_aces,
3336
)
34-
from opencolorio_config_aces.utilities import git_describe
37+
from opencolorio_config_aces.utilities import git_describe, regularise_version
3538

3639
__author__ = "OpenColorIO Contributors"
3740
__copyright__ = "Copyright Contributors to the OpenColorIO Project."
@@ -44,13 +47,17 @@
4447
"PATH_TRANSFORMS_MAPPING_FILE_CG",
4548
"clf_transform_to_description",
4649
"clf_transform_to_colorspace",
50+
"dependency_versions",
51+
"config_basename_cg",
52+
"config_name_cg",
53+
"config_description_cg",
4754
"generate_config_cg",
4855
]
4956

50-
PATH_TRANSFORMS_MAPPING_FILE_CG = (
51-
Path(__file__).parents[0]
52-
/ "resources"
53-
/ "OpenColorIO-Config-ACES _CG_ Transforms - CG Config - Mapping.csv"
57+
PATH_TRANSFORMS_MAPPING_FILE_CG = next(
58+
(Path(__file__).parents[0] / "resources").glob(
59+
"OpenColorIO-Config-ACES CG Transforms - * - CG Config - Mapping.csv"
60+
)
5461
)
5562
"""
5663
Path to the *ACES* *CTL* transforms to *OpenColorIO* colorspaces mapping file.
@@ -215,6 +222,126 @@ def clf_transform_to_named_transform(
215222
return named_transform
216223

217224

225+
def dependency_versions(
226+
config_mapping_file_path=PATH_TRANSFORMS_MAPPING_FILE_CG,
227+
):
228+
"""
229+
Return the dependency versions of the ACES* Computer Graphics (CG)
230+
*OpenColorIO* config.
231+
232+
Parameters
233+
----------
234+
config_mapping_file_path : str, optional
235+
Path to the *CSV* mapping file.
236+
237+
Returns
238+
-------
239+
dict
240+
Dependency versions.
241+
242+
Examples
243+
--------
244+
>>> dependency_versions() # doctest: +SKIP
245+
{'aces': 'v1.3', 'ocio': 'v2.1.2dev', 'colorspaces': 'v0.1.0'}
246+
"""
247+
248+
versions = {
249+
"aces": regularise_version(version_aces_dev()),
250+
"ocio": regularise_version(ocio.__version__),
251+
"colorspaces": regularise_version(
252+
version_config_mapping_file(config_mapping_file_path)
253+
),
254+
}
255+
256+
return versions
257+
258+
259+
def config_basename_cg(
260+
config_mapping_file_path=PATH_TRANSFORMS_MAPPING_FILE_CG,
261+
):
262+
"""
263+
Generate the ACES* Computer Graphics (CG) *OpenColorIO* config
264+
basename, i.e. the filename devoid of directory prefix.
265+
266+
Parameters
267+
----------
268+
config_mapping_file_path : str, optional
269+
Path to the *CSV* mapping file.
270+
271+
Returns
272+
-------
273+
str
274+
ACES* Computer Graphics (CG) *OpenColorIO* config basename.
275+
276+
Examples
277+
--------
278+
>>> config_basename_cg() # doctest: +SKIP
279+
'cg-config-v0.1.0_aces-v1.3_ocio-v2.1.2dev.ocio'
280+
"""
281+
282+
return ("cg-config-{colorspaces}_aces-{aces}_ocio-{ocio}.ocio").format(
283+
**dependency_versions(config_mapping_file_path)
284+
)
285+
286+
287+
def config_name_cg(config_mapping_file_path=PATH_TRANSFORMS_MAPPING_FILE_CG):
288+
"""
289+
Generate the ACES* Computer Graphics (CG) *OpenColorIO* config name.
290+
291+
Parameters
292+
----------
293+
config_mapping_file_path : str, optional
294+
Path to the *CSV* mapping file.
295+
296+
Returns
297+
-------
298+
str
299+
ACES* Computer Graphics (CG) *OpenColorIO* config name.
300+
301+
Examples
302+
--------
303+
>>> config_name_cg() # doctest: +SKIP
304+
'Academy Color Encoding System - CG Config [COLORSPACES v0.1.0] \
305+
[ACES v1.3] [OCIO v2.1.2dev]'
306+
"""
307+
308+
return (
309+
"Academy Color Encoding System - CG Config "
310+
"[COLORSPACES {colorspaces}] "
311+
"[ACES {aces}] "
312+
"[OCIO {ocio}]"
313+
).format(**dependency_versions(config_mapping_file_path))
314+
315+
316+
def config_description_cg():
317+
"""
318+
Generate the ACES* Computer Graphics (CG) *OpenColorIO* config
319+
description.
320+
321+
Returns
322+
-------
323+
str
324+
ACES* Computer Graphics (CG) *OpenColorIO* config description.
325+
"""
326+
327+
header = (
328+
f'The "Academy Color Encoding System" (ACES {version_aces_dev()}) '
329+
f'"CG Config"'
330+
)
331+
underline = "-" * len(header)
332+
description = (
333+
'This minimalistic "OpenColorIO" config is geared toward computer '
334+
"graphics artists requiring a lean config that does not include "
335+
"camera colorspaces and the less common displays and looks."
336+
)
337+
timestamp = (
338+
f'Generated with "OpenColorIO-Config-ACES" {git_describe()} '
339+
f'on the {datetime.now().strftime("%Y/%m/%d at %H:%M")}.'
340+
)
341+
342+
return "\n".join([header, underline, "", description, "", timestamp])
343+
344+
218345
def generate_config_cg(
219346
data=None,
220347
config_name=None,
@@ -285,18 +412,8 @@ def generate_config_cg(
285412
transform_data
286413
)
287414

288-
data.description = (
289-
f'The "Academy Color Encoding System" (ACES) "CG Config"'
290-
f"\n"
291-
f"------------------------------------------------------"
292-
f"\n\n"
293-
f'This minimalistic "OpenColorIO" config is geared toward computer '
294-
f"graphics artists requiring a lean config that does not include "
295-
f"typical VFX colorspaces, displays and looks."
296-
f"\n\n"
297-
f'Generated with "OpenColorIO-Config-ACES" {git_describe()} '
298-
f'on the {datetime.now().strftime("%Y/%m/%d at %H:%M")}.'
299-
)
415+
data.name = config_name_cg(config_mapping_file_path)
416+
data.description = config_description_cg()
300417

301418
def multi_filters(array, filterers):
302419
"""Apply given filterers on given array."""
@@ -407,7 +524,7 @@ def view_filterer(transform):
407524

408525
assert (
409526
clf_transform
410-
), f'"{clf_transform_id}" "CTL" transform does not exist!'
527+
), f'"{clf_transform_id}" "CLF" transform does not exist!'
411528

412529
interface = transform_data["interface"]
413530

@@ -474,16 +591,20 @@ def view_filterer(transform):
474591
if not os.path.exists(build_directory):
475592
os.makedirs(build_directory)
476593

594+
config_basename = config_basename_cg()
477595
config, data = generate_config_cg(
478-
config_name=os.path.join(build_directory, "config-aces-cg.ocio"),
596+
config_name=os.path.join(build_directory, config_basename),
479597
additional_data=True,
480598
)
481599

482600
# TODO: Pickling "PyOpenColorIO.ColorSpace" fails on early "PyOpenColorIO"
483601
# versions.
484602
try:
485603
serialize_config_data(
486-
data, os.path.join(build_directory, "config-aces-cg.json")
604+
data,
605+
os.path.join(
606+
build_directory, config_basename.replace("ocio", "json")
607+
),
487608
)
488609
except TypeError as error:
489610
logging.critical(error)

opencolorio_config_aces/config/cg/generate/resources/OpenColorIO-Config-ACES _CG_ Transforms - CG Config - Mapping.csv renamed to opencolorio_config_aces/config/cg/generate/resources/OpenColorIO-Config-ACES CG Transforms - v0.1.0 - CG Config - Mapping.csv

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
Ordering,Transform Name,ACEStransformID,CLFtransformID,Linked DisplayColorSpace Style,Interface,Encoding,Categories
2-
100,ACES - ACEScc,urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScc_to_ACES.a1.0.3,,,,,
3-
100,ACES - ACEScct,urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScct_to_ACES.a1.0.3,,,,,
4-
100,ACES - ACEScg,urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScg_to_ACES.a1.0.3,,,,,
5-
100,Input - Generic - sRGB - Texture,,urn:aswf:ocio:transformId:1.0:OCIO:Input:AP0_to_Rec709-sRGB:1.0,,ColorSpace,sdr-video,file-io
6-
100,Output - P3-D65 ST2084 (1000 nits),urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_1000nits_15nits_ST2084.a1.1.0,,,,,
7-
100,Output - P3D65,urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_48nits.a1.1.0,,,,,
8-
100,Output - Rec.2020 ST2084 (1000 nits),urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0,,,,,
9-
100,Output - Rec.709,urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec709_100nits_dim.a1.0.3,,,,,
10-
100,Output - sRGB,urn:ampas:aces:transformId:v1.5:ODT.Academy.RGBmonitor_100nits_dim.a1.0.3,,,,,
11-
100,Utility - Curve - Rec.1886,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:Linear_to_Rec1886:1.0,,NamedTransform,sdr-video,file-io
12-
100,Utility - Curve - sRGB,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:Linear_to_sRGB:1.0,,NamedTransform,sdr-video,file-io
13-
100,Utility - Gamma 1.8 - Rec.709 - Texture,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec709-Gamma1.8:1.0,,ColorSpace,sdr-video,file-io
14-
100,Utility - Gamma 2.2 - AP1 - Texture,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_AP1-Gamma2.2:1.0,,ColorSpace,sdr-video,file-io
15-
100,Utility - Gamma 2.2 - Rec.709 - Texture,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec709-Gamma2.2:1.0,,ColorSpace,sdr-video,file-io
16-
100,Utility - Gamma 2.4 - Rec.709 - Texture,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec709-Gamma2.4:1.0,,ColorSpace,sdr-video,file-io
17-
100,Utility - Linear - P3-D65,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_P3-D65-Linear:1.0,,ColorSpace,scene-linear,file-io
18-
100,Utility - Linear - Rec.2020,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec2020-Linear:1.0,,ColorSpace,scene-linear,file-io
19-
100,Utility - Linear - Rec.709,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec709-Linear:1.0,,ColorSpace,scene-linear,"file-io,working-space"
1+
Ordering,Transform Name,ACEStransformID,CLFtransformID,Linked DisplayColorSpace Style,Interface,Encoding,Categories
2+
100,ACES - ACEScc,urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScc_to_ACES.a1.0.3,,,,,
3+
100,ACES - ACEScct,urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScct_to_ACES.a1.0.3,,,,,
4+
100,ACES - ACEScg,urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScg_to_ACES.a1.0.3,,,,,
5+
100,Input - Generic - sRGB - Texture,,urn:aswf:ocio:transformId:1.0:OCIO:Input:AP0_to_Rec709-sRGB:1.0,,ColorSpace,sdr-video,file-io
6+
100,Output - P3-D65 ST2084 (1000 nits),urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_1000nits_15nits_ST2084.a1.1.0,,,,,
7+
100,Output - P3D65,urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_48nits.a1.1.0,,,,,
8+
100,Output - Rec.2020 ST2084 (1000 nits),urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0,,,,,
9+
100,Output - Rec.709,urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec709_100nits_dim.a1.0.3,,,,,
10+
100,Output - sRGB,urn:ampas:aces:transformId:v1.5:ODT.Academy.RGBmonitor_100nits_dim.a1.0.3,,,,,
11+
100,Utility - Curve - Rec.1886,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:Linear_to_Rec1886:1.0,,NamedTransform,sdr-video,file-io
12+
100,Utility - Curve - sRGB,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:Linear_to_sRGB:1.0,,NamedTransform,sdr-video,file-io
13+
100,Utility - Gamma 1.8 - Rec.709 - Texture,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec709-Gamma1.8:1.0,,ColorSpace,sdr-video,file-io
14+
100,Utility - Gamma 2.2 - AP1 - Texture,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_AP1-Gamma2.2:1.0,,ColorSpace,sdr-video,file-io
15+
100,Utility - Gamma 2.2 - Rec.709 - Texture,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec709-Gamma2.2:1.0,,ColorSpace,sdr-video,file-io
16+
100,Utility - Gamma 2.4 - Rec.709 - Texture,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec709-Gamma2.4:1.0,,ColorSpace,sdr-video,file-io
17+
100,Utility - Linear - P3-D65,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_P3-D65-Linear:1.0,,ColorSpace,scene-linear,file-io
18+
100,Utility - Linear - Rec.2020,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec2020-Linear:1.0,,ColorSpace,scene-linear,file-io
19+
100,Utility - Linear - Rec.709,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec709-Linear:1.0,,ColorSpace,scene-linear,"file-io,working-space"
2020
100,Utility - Linear - sRGB,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Rec709-Linear:1.0,,ColorSpace,scene-linear,"file-io,working-space"

opencolorio_config_aces/config/cg/generate/tests/test_resources.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77

88

99
import unittest
10-
import urllib.request
10+
import requests
1111

12-
from pathlib import Path
12+
from opencolorio_config_aces.config.cg.generate.config import (
13+
PATH_TRANSFORMS_MAPPING_FILE_CG,
14+
)
1315

1416
__author__ = "OpenColorIO Contributors"
1517
__copyright__ = "Copyright Contributors to the OpenColorIO Project."
@@ -32,12 +34,7 @@ class TestConfigResources(unittest.TestCase):
3234
def test_csv_mapping_file(self):
3335
"""Test the *CSV* mapping file."""
3436

35-
csv_local_path = (
36-
Path(__file__).parents[0]
37-
/ ".."
38-
/ "resources"
39-
/ "OpenColorIO-Config-ACES _CG_ Transforms - CG Config - Mapping.csv"
40-
)
37+
csv_local_path = PATH_TRANSFORMS_MAPPING_FILE_CG
4138

4239
with open(str(csv_local_path)) as csv_local_file:
4340
csv_local_content = csv_local_file.read()
@@ -48,9 +45,7 @@ def test_csv_mapping_file(self):
4845
"export?format=csv&gid=609660164"
4946
)
5047

51-
csv_remote_content = (
52-
urllib.request.urlopen(csv_remote_url).read().decode("utf-8")
53-
)
48+
csv_remote_content = requests.get(csv_remote_url).text
5449

5550
self.assertMultiLineEqual(
5651
"\n".join(csv_remote_content.splitlines()),

0 commit comments

Comments
 (0)