import base64 import glob import os __version__ = "0.1.4" def parse_settings(settings_filename): settings_filename = os.path.abspath(settings_filename) name, ext = os.path.splitext(os.path.basename(settings_filename)) settings = { "name": name, "hasRightsToModel": True, "acceptTermsAndConditions": True, "materials": {}, } with open(settings_filename) as fp: for line in fp: name, _, value = line.strip("\r\n").partition("=") if value.lower() == "false": value = False elif value.lower() == "true": value = True if name == "file": dirname = os.path.dirname(settings_filename) value = os.path.abspath(os.path.join(dirname, value)) filename = os.path.basename(value) settings["fileName"] = filename elif name.startswith("material."): _, _, mat_id = name.partition(".") settings["materials"][int(mat_id)] = { "markup": float(value), "isActive": True, } continue elif name == "categories": value = [int(c) for c in value.split(",")] elif name == "tags": value = [t for t in value.split(",")] settings[name] = value return settings_filename, settings def get_models(dir_name=None): if dir_name is None: dir_name = os.getcwd() pattern = "%s/*.ini" % (dir_name, ) for settings_filename in glob.iglob(pattern): yield parse_settings(settings_filename) def upload_model(settings, client): if not settings.get("file"): return False with open(settings["file"], "rb") as fp: settings["file"] = base64.b64encode(fp.read()) return client.add_model(settings)