def command( name, package, author, email, description, license, homepage, source, installurl, identifier, ): """Creates a new plugin based on the OctoPrint Plugin cookiecutter template.""" from octoprint.util import tempdir # deleting a git checkout folder might run into access errors due # to write-protected sub folders, so we use a custom onerror handler # that tries to fix such permissions def onerror(func, path, exc_info): """Originally from http://stackoverflow.com/a/2656405/2028598""" import os import stat if not os.access(path, os.W_OK): os.chmod(path, stat.S_IWUSR) func(path) else: raise with tempdir(onerror=onerror) as path: custom = {"cookiecutters_dir": path} with custom_cookiecutter_config(custom): raw_options = { "plugin_identifier": identifier, "plugin_package": package, "plugin_name": name, "full_name": author, "email": email, "plugin_description": description, "plugin_license": license, "plugin_homepage": homepage, "plugin_source": source, "plugin_installurl": installurl, } options = { k: v for k, v in raw_options.items() if v is not None } with custom_cookiecutter_prompt(options): cookiecutter.main.cookiecutter( "gh:OctoPrint/cookiecutter-octoprint-plugin")
def command(name, package, author, email, description, license, homepage, source, installurl, identifier): """Creates a new plugin based on the OctoPrint Plugin cookiecutter template.""" from octoprint.util import tempdir # deleting a git checkout folder might run into access errors due # to write-protected sub folders, so we use a custom onerror handler # that tries to fix such permissions def onerror(func, path, exc_info): """Originally from http://stackoverflow.com/a/2656405/2028598""" import stat import os if not os.access(path, os.W_OK): os.chmod(path, stat.S_IWUSR) func(path) else: raise with tempdir(onerror=onerror) as path: custom = dict(cookiecutters_dir=path) with custom_cookiecutter_config(custom): raw_options = dict( plugin_identifier=identifier, plugin_package=package, plugin_name=name, full_name=author, email=email, plugin_description=description, plugin_license=license, plugin_homepage=homepage, plugin_source=source, plugin_installurl=installurl ) options = dict((k, v) for k, v in raw_options.items() if v is not None) with custom_cookiecutter_prompt(options): cookiecutter.main.cookiecutter("gh:OctoPrint/cookiecutter-octoprint-plugin")