Source code for duck.cli.commands.makeproject
"""
Module containing makeproject command class.
"""
import os
from duck.logging import console
from duck.utils.path import joinpaths
[docs]
class MakeProjectCommand:
# makeproject command
[docs]
@classmethod
def setup(cls):
# Setup before command execution
os.environ["DUCK_SETTINGS_MODULE"] = "duck.etc.structures.projects.testing.web.settings"
[docs]
@classmethod
def main(
cls,
name,
dest_dir: str = ".",
overwrite_existing: bool = False,
project_type: str = "normal"
):
# Setup minimum settings module for CLI to function correctly
cls.setup()
cls.makeproject(name, dest_dir, overwrite_existing, project_type)
[docs]
@classmethod
def makeproject(
cls,
name,
dest_dir: str = ".",
overwrite_existing: bool = False,
project_type: str = "normal",
):
# Execute command after setup.
from duck.setup.makeproject import makeproject
dest_dir = os.path.abspath(dest_dir)
dest_project_path = joinpaths(dest_dir, name)
console.log(
f'Creating Duck {project_type.title()} Project' if project_type != "normal"
else f'Creating Duck Project',
level=console.DEBUG,
)
try:
makeproject(
name,
dest_dir,
overwrite_existing=overwrite_existing,
project_type=project_type,
) # create project
# Log something to the console
console.log(
f'Project "{name}" created at "{dest_project_path}"',
custom_color=console.Fore.GREEN,
)
except FileExistsError:
console.log(
f'Project with name "{name}" already exists at: "{dest_project_path}"',
level=console.WARNING,
)
overwrite = input(
"\nDo you wish to overwrite the existing project (y/N): ")
print() # print a newline
if overwrite.lower().startswith("y"):
makeproject(
name,
dest_dir,
overwrite_existing=True,
project_type=project_type)
# Log something to console.
console.log(
f'Project "{name}" created at "{dest_project_path}"',
custom_color=console.Fore.GREEN)
else:
console.log("Cancelled project creation!", level=console.DEBUG)
except Exception as e:
# Project creation failed.
console.log(f"Error: {str(e)}", level=console.ERROR)
raise e