Easy to use bulk model uploader for Shapeways API
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

62 lines
1.9 KiB

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)