Source code for blendersynth.file.dataset_inputs
"""When constructing a dataset, the INPUTS object below will
return an iterable with read's in sys.argv's `--jobs` jsons."""
import sys
import json
import os
import logging
from typing import Union, List
[docs]
class Inputs:
"""This class is used to iterate over the JSONs passed in via `--jobs` in sys.argv.
Will also convert all kwargs to attributes for easy access"""
jsons = None
"""List of JSON files passed in via `--jobs` in sys.argv."""
def __init__(self):
self.jsons = sys.argv[sys.argv.index("--jobs") + 1].split(",")
log_loc = sys.argv[sys.argv.index("--log") + 1]
# Set up logging
logging.basicConfig(
filename=log_loc,
level=logging.INFO,
filemode="a",
format="%(asctime)s - %(levelname)s - %(message)s",
)
# store all --kwargs as attributes
for k, v in zip(sys.argv, sys.argv[1:]):
if k.startswith("--"):
setattr(self, k[2:], v)
def __iter__(self):
for n, j in enumerate(self.jsons):
with open(j, "r") as f:
fname = os.path.splitext(os.path.split(j)[-1])[0]
yield fname, json.load(f)
# Once we get here, we've passed 'yield', so we know that JSON has been loaded & rendering has occured
logging.info(f"RENDERED: {fname}")
def __len__(self):
return len(self.jsons)
[docs]
class DebugInputs(Inputs):
"""Class to emulate the Inputs class, for a single JSON for testing."""
def __init__(self, json_loc: Union[str, List], repeats: int = 1):
"""
:param json_loc: Location of JSON(s) to use
:param repeat: Number of times to repeat the JSON(s)
"""
if isinstance(json_loc, str):
json_loc = [json_loc]
self.jsons = json_loc * repeats