Skip to content

Commit

Permalink
Start adding YAML parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
ThomasWilshaw committed Sep 21, 2024
1 parent 163ba5d commit c21ca04
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 25 deletions.
26 changes: 1 addition & 25 deletions tcolour/Colourimetry.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from enum import Enum
from tcolour import TransferCharacteristic as tc

class RGBPrimaries():
"""Defines a set of three RGB primaries using the CIE xy coordinate system."""
Expand Down Expand Up @@ -37,7 +36,7 @@ class Colourimetry:
"""
def __init__(self, descriptor:str="", rgb_primaries:RGBPrimaries=RGBPrimaries(), achromatic:list=[],
transfer_characteristic:tc.TransferCharacteristic=None, hints:list=[], alias:list=[],
transfer_characteristic=None, hints:list=[], alias:list=[],
cie_version:CIEVersion=None) -> None:
self.descriptor = descriptor
self.primaries = rgb_primaries
Expand Down Expand Up @@ -69,26 +68,3 @@ def __repr__(self) -> str:
return "Colourimetry(descriptor=%r,primaries=%r, achromatic=%r, transfer_characteristic=%r, hints=%r, alias=%r, cie_version=%r)" \
% (self.descriptor, self.primaries, self.achromatic, self.transfer_characteristic, self.hints, self.alias, self.cie_version)


if __name__ == "__main__":
col = Colourimetry()
print(col.__doc__)

col.descriptor = "sRGB"

col.primaries.r = [0.64, 0.33]
col.primaries.g = [0.3, 0.6]
col.primaries.b = [0.15, 0.06]

col.achromatic = [0.3127, 0.329]

col.transfer_characteristic = tc.TransferCharacteristicPower(parameters={'a': 2.2})
col.hints.append("value")
col.alias.append("value")

col.cie_version = CIEVersion.CIE_1931_2_DEGREE

print(col.colourspace_valid())

print(repr(col))

75 changes: 75 additions & 0 deletions tcolour/tcolour.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import yaml
import Colourimetry

class TColor():
"""Contains a set of known colour spaces. Allows for interacting with and
adding or removing colour spaces"""

def __init__(self) -> None:
self.config = {}

def RGBPrimaries_from_YAML(self, yaml_input) -> Colourimetry.RGBPrimaries:
try:
red = yaml_input["Red"]
green = yaml_input["Green"]
blue = yaml_input["Blue"]

primaries = Colourimetry.RGBPrimaries(list(red.values()), list(green.values()), list(blue.values()))

return primaries
except KeyError as e:
print("YAML ERROR: ", e)


def parse_data(self, data:list):
"""Parse the YAML data"""
for id, idx in enumerate(data):
new_colourimetry_set = Colourimetry.Colourimetry()
name = list(data[id].keys())[0]
colour_space = data[id][name]

new_colourimetry_set.descriptor = name

if "RGB Primaries" in colour_space:
primaries = colour_space["RGB Primaries"]
if type(primaries) is dict:
new_colourimetry_set.primaries = self.RGBPrimaries_from_YAML(primaries)
else:
new_colourimetry_set.primaries = primaries

if "Achromatic Centroid" in colour_space:
new_colourimetry_set.achromatic = colour_space["Achromatic Centroid"]

if "Transfer Characteristic" in colour_space:
new_colourimetry_set.transfer_characteristic = colour_space["Transfer Characteristic"]

if "Hints" in colour_space:
new_colourimetry_set.hints = colour_space["Hints"]

if "Alias" in colour_space:
new_colourimetry_set.alias = colour_space["Alias"]

if "CIE Version" in colour_space:
new_colourimetry_set.cie_version = colour_space["CIE Version"]

self.config[str(name)] = new_colourimetry_set




def add_colour_space(self, colour_space):
"""Add a colour space to the config as either a file or a string"""

with open(colour_space, 'r') as file:
data = yaml.safe_load(file)
self.parse_data(data)



if __name__ == "__main__":
config = TColor()

config.add_colour_space("..\\tests\\files\\tcolor_test.yaml")

for key, value in config.config.items():
print(key, value)

0 comments on commit c21ca04

Please sign in to comment.