diff --git a/pype/scripts/slates/__main__.py b/pype/scripts/slates/__main__.py index 29282d3226..43efcfbb06 100644 --- a/pype/scripts/slates/__main__.py +++ b/pype/scripts/slates/__main__.py @@ -1,10 +1,17 @@ +import json from slate_base import api def main(in_args=None): - # TODO proper argument handling - api.example() + data_arg = in_args[-1] + in_data = json.loads(data_arg) + api.create_slates( + in_data["fill_data"], + in_data.get("slate_name"), + in_data.get("slate_data"), + in_data.get("data_output_json") + ) if __name__ == "__main__": - main() + main(sys.argv) diff --git a/pype/scripts/slates/slate_base/lib.py b/pype/scripts/slates/slate_base/lib.py index 3c7a465e98..d9f8ad6d42 100644 --- a/pype/scripts/slates/slate_base/lib.py +++ b/pype/scripts/slates/slate_base/lib.py @@ -1,3 +1,5 @@ +import os +import json import logging try: from queue import Queue @@ -21,21 +23,36 @@ log = logging.getLogger(__name__) RequiredSlateKeys = ["width", "height", "destination_path"] -def create_slates(fill_data, slate_name, slate_presets=None): - if slate_presets is None: - presets = get_presets() +# TODO proper documentation +def create_slates( + fill_data, slate_name=None, slate_data=None, data_output_json=None +): + """Implmentation for command line executing. + + Data for slates are by defaule taken from presets. That requires to enter, + `slate_name`. If `slate_data` are entered then they are used. + + `data_output` should be path to json file where data will be collected. + """ + if slate_data is None and slate_name is None: + raise TypeError( + "`create_slates` expects to enter data for slates or name" + " of slate preset." + ) + + elif slate_data is None: slate_presets = ( - presets + get_presets() .get("tools", {}) .get("slates") ) or {} - slate_data = slate_presets.get(slate_name) - - if not slate_data: - log.error( - "Name \"{}\" was not found in slate presets.".format(slate_name) - ) - return False + slate_data = slate_presets.get(slate_name) + if slate_data is None: + raise ValueError( + "Preset name \"{}\" was not found in slate presets.".format( + slate_name + ) + ) missing_keys = [] for key in RequiredSlateKeys: @@ -116,3 +133,20 @@ def create_slates(fill_data, slate_name, slate_presets=None): main.draw() log.debug("Slate creation finished") + + if not data_output_json: + return + + if not data_output_json.endswith(".json"): + raise ValueError("Output path must be .json file.") + + data_output_json_dir = os.path.dirname(data_output_json) + if not os.path.exists(data_output_json_dir): + log.info("Creating folder \"{}\"".format(data_output_json_dir)) + os.makedirs(data_output_json_dir) + + output_data = main.collect_data() + with open(data_output_json, "w") as json_file: + json_file.write(json.dumps(output_data, indent=4)) + + log.info("Metadata collected in \"{}\".".format(data_output_json))