From 072e42edddd57442bd24941cfd8de215f51d5006 Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Wed, 29 Oct 2025 13:18:19 +0545 Subject: [PATCH] refactor: restructure project and implement CLI framework --- .github/workflows/ci.yml | 2 +- pyproject.toml | 4 ++-- setup.py | 12 +++++++++--- src/{ => djinit}/__init__.py | 0 src/{ => djinit}/cli.py | 14 +++++++------- src/{ => djinit}/generator.py | 8 ++++---- src/{ => djinit}/scripts/__init__.py | 0 src/{ => djinit}/scripts/app_generator.py | 6 +++--- src/{ => djinit}/scripts/cicd_config_generator.py | 4 ++-- src/{ => djinit}/scripts/command_handler.py | 8 ++++---- src/{ => djinit}/scripts/console_ui.py | 0 .../scripts/deployment_files_generator.py | 4 ++-- src/{ => djinit}/scripts/files.py | 4 ++-- src/{ => djinit}/scripts/input_handler.py | 4 ++-- src/{ => djinit}/scripts/name_validator.py | 0 src/{ => djinit}/scripts/project.py | 4 ++-- src/{ => djinit}/scripts/secretkey_generator.py | 2 +- src/{ => djinit}/scripts/settings.py | 8 ++++---- src/{ => djinit}/scripts/template_engine.py | 0 src/{ => djinit}/templates/app_urls.j2 | 0 src/{ => djinit}/templates/asgi.j2 | 0 src/{ => djinit}/templates/env_sample.j2 | 0 src/{ => djinit}/templates/github_actions_ci.j2 | 0 src/{ => djinit}/templates/gitignore.j2 | 0 src/{ => djinit}/templates/gitlab_ci.j2 | 0 src/{ => djinit}/templates/justfile.j2 | 0 src/{ => djinit}/templates/manage_py.j2 | 0 src/{ => djinit}/templates/procfile.j2 | 0 src/{ => djinit}/templates/project_urls.j2 | 0 src/{ => djinit}/templates/pyproject_toml.j2 | 0 src/{ => djinit}/templates/readme.j2 | 0 src/{ => djinit}/templates/requirements.j2 | 0 src/{ => djinit}/templates/routes.j2 | 0 src/{ => djinit}/templates/runtime_txt.j2 | 0 src/{ => djinit}/templates/serializers.j2 | 0 src/{ => djinit}/templates/settings_base.j2 | 0 src/{ => djinit}/templates/settings_development.j2 | 0 src/{ => djinit}/templates/settings_production.j2 | 0 src/{ => djinit}/templates/wsgi.j2 | 0 src/{ => djinit}/utils.py | 2 +- 40 files changed, 46 insertions(+), 40 deletions(-) rename src/{ => djinit}/__init__.py (100%) rename src/{ => djinit}/cli.py (91%) rename src/{ => djinit}/generator.py (87%) rename src/{ => djinit}/scripts/__init__.py (100%) rename src/{ => djinit}/scripts/app_generator.py (98%) rename src/{ => djinit}/scripts/cicd_config_generator.py (91%) rename src/{ => djinit}/scripts/command_handler.py (94%) rename src/{ => djinit}/scripts/console_ui.py (100%) rename src/{ => djinit}/scripts/deployment_files_generator.py (96%) rename src/{ => djinit}/scripts/files.py (98%) rename src/{ => djinit}/scripts/input_handler.py (98%) rename src/{ => djinit}/scripts/name_validator.py (100%) rename src/{ => djinit}/scripts/project.py (97%) rename src/{ => djinit}/scripts/secretkey_generator.py (97%) rename src/{ => djinit}/scripts/settings.py (93%) rename src/{ => djinit}/scripts/template_engine.py (100%) rename src/{ => djinit}/templates/app_urls.j2 (100%) rename src/{ => djinit}/templates/asgi.j2 (100%) rename src/{ => djinit}/templates/env_sample.j2 (100%) rename src/{ => djinit}/templates/github_actions_ci.j2 (100%) rename src/{ => djinit}/templates/gitignore.j2 (100%) rename src/{ => djinit}/templates/gitlab_ci.j2 (100%) rename src/{ => djinit}/templates/justfile.j2 (100%) rename src/{ => djinit}/templates/manage_py.j2 (100%) rename src/{ => djinit}/templates/procfile.j2 (100%) rename src/{ => djinit}/templates/project_urls.j2 (100%) rename src/{ => djinit}/templates/pyproject_toml.j2 (100%) rename src/{ => djinit}/templates/readme.j2 (100%) rename src/{ => djinit}/templates/requirements.j2 (100%) rename src/{ => djinit}/templates/routes.j2 (100%) rename src/{ => djinit}/templates/runtime_txt.j2 (100%) rename src/{ => djinit}/templates/serializers.j2 (100%) rename src/{ => djinit}/templates/settings_base.j2 (100%) rename src/{ => djinit}/templates/settings_development.j2 (100%) rename src/{ => djinit}/templates/settings_production.j2 (100%) rename src/{ => djinit}/templates/wsgi.j2 (100%) rename src/{ => djinit}/utils.py (96%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 70a6fb2..d942002 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,7 @@ jobs: - name: Test CLI import run: | - python -c "from src.generator import main; print('Import successful')" + python -c "from djinit.generator import main; print('Import successful')" - name: Test console script entry point run: | diff --git a/pyproject.toml b/pyproject.toml index add3e20..6a6a81a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,5 +39,5 @@ dependencies = [ Homepage = "https://github.com/S4NKALP/djinit" [project.scripts] -djinit = "src.generator:main" -dj = "src.generator:main" +djinit = "djinit.generator:main" +dj = "djinit.generator:main" diff --git a/setup.py b/setup.py index fd25ee8..8d4d1fe 100644 --- a/setup.py +++ b/setup.py @@ -9,16 +9,22 @@ setup( author="Sankalp Tharu", author_email="sankalptharu50028@gmail.com", url="https://github.com/S4NKALP/djinit", - packages=find_packages(include=["src", "src.*"]), + packages=find_packages(where="src"), + package_dir={"": "src"}, include_package_data=True, install_requires=[ "ruff>=0.14.2", "click>=8.3.0", "rich>=14.2.0", "jinja2>=3.1.0", - # "django<=5.2.7", + "django>=4.2,<6.0", ], - entry_points={"console_scripts": ["djinit=src.generator:main"]}, + entry_points={ + "console_scripts": [ + "djinit=djinit.generator:main", + "dj=djinit.generator:main", + ] + }, classifiers=[ "Programming Language :: Python", "Programming Language :: Python :: 3", diff --git a/src/__init__.py b/src/djinit/__init__.py similarity index 100% rename from src/__init__.py rename to src/djinit/__init__.py diff --git a/src/cli.py b/src/djinit/cli.py similarity index 91% rename from src/cli.py rename to src/djinit/cli.py index 6996e6b..a6773c3 100644 --- a/src/cli.py +++ b/src/djinit/cli.py @@ -6,13 +6,13 @@ Coordinates between different managers to create a complete Django project. import os from typing import Callable, List, Tuple -from src.scripts.cicd_config_generator import CICDConfigGenerator -from src.scripts.console_ui import UIFormatter -from src.scripts.deployment_files_generator import DeploymentConfigGenerator -from src.scripts.files import FileManager -from src.scripts.project import ProjectManager -from src.scripts.secretkey_generator import generate_secret_command -from src.scripts.settings import SettingsManager +from djinit.scripts.cicd_config_generator import CICDConfigGenerator +from djinit.scripts.console_ui import UIFormatter +from djinit.scripts.deployment_files_generator import DeploymentConfigGenerator +from djinit.scripts.files import FileManager +from djinit.scripts.project import ProjectManager +from djinit.scripts.secretkey_generator import generate_secret_command +from djinit.scripts.settings import SettingsManager class Cli: diff --git a/src/generator.py b/src/djinit/generator.py similarity index 87% rename from src/generator.py rename to src/djinit/generator.py index fc28722..2c97a5b 100644 --- a/src/generator.py +++ b/src/djinit/generator.py @@ -7,10 +7,10 @@ import os import subprocess import sys -from src.cli import Cli -from src.scripts.command_handler import handle_app_command, handle_secret_command, parse_arguments -from src.scripts.console_ui import UIFormatter, console -from src.scripts.input_handler import confirm_setup, get_user_input +from djinit.cli import Cli +from djinit.scripts.command_handler import handle_app_command, handle_secret_command, parse_arguments +from djinit.scripts.console_ui import UIFormatter, console +from djinit.scripts.input_handler import confirm_setup, get_user_input def clear_screen() -> None: diff --git a/src/scripts/__init__.py b/src/djinit/scripts/__init__.py similarity index 100% rename from src/scripts/__init__.py rename to src/djinit/scripts/__init__.py diff --git a/src/scripts/app_generator.py b/src/djinit/scripts/app_generator.py similarity index 98% rename from src/scripts/app_generator.py rename to src/djinit/scripts/app_generator.py index a572566..121ce3a 100644 --- a/src/scripts/app_generator.py +++ b/src/djinit/scripts/app_generator.py @@ -7,9 +7,9 @@ import os import subprocess from typing import Optional -from src.scripts.console_ui import UIFormatter -from src.scripts.template_engine import template_engine -from src.utils import change_cwd, create_file_with_content +from djinit.scripts.console_ui import UIFormatter +from djinit.scripts.template_engine import template_engine +from djinit.utils import change_cwd, create_file_with_content class AppManager: diff --git a/src/scripts/cicd_config_generator.py b/src/djinit/scripts/cicd_config_generator.py similarity index 91% rename from src/scripts/cicd_config_generator.py rename to src/djinit/scripts/cicd_config_generator.py index 3410281..df5b7b9 100644 --- a/src/scripts/cicd_config_generator.py +++ b/src/djinit/scripts/cicd_config_generator.py @@ -5,8 +5,8 @@ Handles creation of Github Actions and GitLab CI onfigurations import os -from src.scripts.template_engine import template_engine -from src.utils import change_cwd, create_file_with_content +from djinit.scripts.template_engine import template_engine +from djinit.utils import change_cwd, create_file_with_content class CICDConfigGenerator: diff --git a/src/scripts/command_handler.py b/src/djinit/scripts/command_handler.py similarity index 94% rename from src/scripts/command_handler.py rename to src/djinit/scripts/command_handler.py index e76bba3..9f2901a 100644 --- a/src/scripts/command_handler.py +++ b/src/djinit/scripts/command_handler.py @@ -6,8 +6,8 @@ Handles different commands like secret key generation and app creation. import argparse import sys -from src.scripts.console_ui import UIColors, UIFormatter, console -from src.scripts.name_validator import validate_app_name +from djinit.scripts.console_ui import UIColors, UIFormatter, console +from djinit.scripts.name_validator import validate_app_name def parse_arguments() -> argparse.Namespace: @@ -43,7 +43,7 @@ def parse_arguments() -> argparse.Namespace: def handle_secret_command(args: argparse.Namespace) -> None: - from src.scripts.secretkey_generator import display_secret_keys, generate_multiple_keys + from djinit.scripts.secretkey_generator import display_secret_keys, generate_multiple_keys # Generate keys keys = generate_multiple_keys(args.count, args.length) @@ -70,7 +70,7 @@ def handle_secret_command(args: argparse.Namespace) -> None: def handle_app_command(args: argparse.Namespace) -> None: - from src.scripts.app_generator import AppManager + from djinit.scripts.app_generator import AppManager # Display welcome message UIFormatter.print_info("") diff --git a/src/scripts/console_ui.py b/src/djinit/scripts/console_ui.py similarity index 100% rename from src/scripts/console_ui.py rename to src/djinit/scripts/console_ui.py diff --git a/src/scripts/deployment_files_generator.py b/src/djinit/scripts/deployment_files_generator.py similarity index 96% rename from src/scripts/deployment_files_generator.py rename to src/djinit/scripts/deployment_files_generator.py index b9f191b..5bf0d95 100644 --- a/src/scripts/deployment_files_generator.py +++ b/src/djinit/scripts/deployment_files_generator.py @@ -3,8 +3,8 @@ Deployment file generator for djinit. Handles creation of Justfile, Procfile, and deployment-related files. """ -from src.scripts.template_engine import template_engine -from src.utils import change_cwd, create_file_with_content +from djinit.scripts.template_engine import template_engine +from djinit.utils import change_cwd, create_file_with_content class DeploymentConfigGenerator: diff --git a/src/scripts/files.py b/src/djinit/scripts/files.py similarity index 98% rename from src/scripts/files.py rename to src/djinit/scripts/files.py index 205efed..ca00806 100644 --- a/src/scripts/files.py +++ b/src/djinit/scripts/files.py @@ -5,8 +5,8 @@ Handles creation and modification of project files. import os -from src.scripts.template_engine import template_engine -from src.utils import change_cwd, create_file_with_content +from djinit.scripts.template_engine import template_engine +from djinit.utils import change_cwd, create_file_with_content class FileManager: diff --git a/src/scripts/input_handler.py b/src/djinit/scripts/input_handler.py similarity index 98% rename from src/scripts/input_handler.py rename to src/djinit/scripts/input_handler.py index 07c5e59..a245c76 100644 --- a/src/scripts/input_handler.py +++ b/src/djinit/scripts/input_handler.py @@ -11,8 +11,8 @@ from dataclasses import dataclass from enum import Enum from typing import Callable, Tuple -from src.scripts.console_ui import UIColors, UIFormatter, console -from src.scripts.name_validator import validate_app_name, validate_project_name +from djinit.scripts.console_ui import UIColors, UIFormatter, console +from djinit.scripts.name_validator import validate_app_name, validate_project_name class CICDOption(Enum): diff --git a/src/scripts/name_validator.py b/src/djinit/scripts/name_validator.py similarity index 100% rename from src/scripts/name_validator.py rename to src/djinit/scripts/name_validator.py diff --git a/src/scripts/project.py b/src/djinit/scripts/project.py similarity index 97% rename from src/scripts/project.py rename to src/djinit/scripts/project.py index 220699f..c0b346c 100644 --- a/src/scripts/project.py +++ b/src/djinit/scripts/project.py @@ -8,8 +8,8 @@ import os import subprocess import sys -from src.scripts.console_ui import UIFormatter -from src.utils import change_cwd +from djinit.scripts.console_ui import UIFormatter +from djinit.utils import change_cwd class ProjectManager: diff --git a/src/scripts/secretkey_generator.py b/src/djinit/scripts/secretkey_generator.py similarity index 97% rename from src/scripts/secretkey_generator.py rename to src/djinit/scripts/secretkey_generator.py index 4194d21..cbe732b 100644 --- a/src/scripts/secretkey_generator.py +++ b/src/djinit/scripts/secretkey_generator.py @@ -12,7 +12,7 @@ from rich.panel import Panel from rich.table import Table from rich.text import Text -from src.scripts.console_ui import UIColors +from djinit.scripts.console_ui import UIColors console = Console() diff --git a/src/scripts/settings.py b/src/djinit/scripts/settings.py similarity index 93% rename from src/scripts/settings.py rename to src/djinit/scripts/settings.py index 4d2c683..96ce0de 100644 --- a/src/scripts/settings.py +++ b/src/djinit/scripts/settings.py @@ -5,10 +5,10 @@ Handles creation and configuration of Django settings files. import os -from src.scripts.console_ui import UIFormatter -from src.scripts.secretkey_generator import generate_secret_key -from src.scripts.template_engine import template_engine -from src.utils import change_cwd, create_file_with_content +from djinit.scripts.console_ui import UIFormatter +from djinit.scripts.secretkey_generator import generate_secret_key +from djinit.scripts.template_engine import template_engine +from djinit.utils import change_cwd, create_file_with_content class SettingsManager: diff --git a/src/scripts/template_engine.py b/src/djinit/scripts/template_engine.py similarity index 100% rename from src/scripts/template_engine.py rename to src/djinit/scripts/template_engine.py diff --git a/src/templates/app_urls.j2 b/src/djinit/templates/app_urls.j2 similarity index 100% rename from src/templates/app_urls.j2 rename to src/djinit/templates/app_urls.j2 diff --git a/src/templates/asgi.j2 b/src/djinit/templates/asgi.j2 similarity index 100% rename from src/templates/asgi.j2 rename to src/djinit/templates/asgi.j2 diff --git a/src/templates/env_sample.j2 b/src/djinit/templates/env_sample.j2 similarity index 100% rename from src/templates/env_sample.j2 rename to src/djinit/templates/env_sample.j2 diff --git a/src/templates/github_actions_ci.j2 b/src/djinit/templates/github_actions_ci.j2 similarity index 100% rename from src/templates/github_actions_ci.j2 rename to src/djinit/templates/github_actions_ci.j2 diff --git a/src/templates/gitignore.j2 b/src/djinit/templates/gitignore.j2 similarity index 100% rename from src/templates/gitignore.j2 rename to src/djinit/templates/gitignore.j2 diff --git a/src/templates/gitlab_ci.j2 b/src/djinit/templates/gitlab_ci.j2 similarity index 100% rename from src/templates/gitlab_ci.j2 rename to src/djinit/templates/gitlab_ci.j2 diff --git a/src/templates/justfile.j2 b/src/djinit/templates/justfile.j2 similarity index 100% rename from src/templates/justfile.j2 rename to src/djinit/templates/justfile.j2 diff --git a/src/templates/manage_py.j2 b/src/djinit/templates/manage_py.j2 similarity index 100% rename from src/templates/manage_py.j2 rename to src/djinit/templates/manage_py.j2 diff --git a/src/templates/procfile.j2 b/src/djinit/templates/procfile.j2 similarity index 100% rename from src/templates/procfile.j2 rename to src/djinit/templates/procfile.j2 diff --git a/src/templates/project_urls.j2 b/src/djinit/templates/project_urls.j2 similarity index 100% rename from src/templates/project_urls.j2 rename to src/djinit/templates/project_urls.j2 diff --git a/src/templates/pyproject_toml.j2 b/src/djinit/templates/pyproject_toml.j2 similarity index 100% rename from src/templates/pyproject_toml.j2 rename to src/djinit/templates/pyproject_toml.j2 diff --git a/src/templates/readme.j2 b/src/djinit/templates/readme.j2 similarity index 100% rename from src/templates/readme.j2 rename to src/djinit/templates/readme.j2 diff --git a/src/templates/requirements.j2 b/src/djinit/templates/requirements.j2 similarity index 100% rename from src/templates/requirements.j2 rename to src/djinit/templates/requirements.j2 diff --git a/src/templates/routes.j2 b/src/djinit/templates/routes.j2 similarity index 100% rename from src/templates/routes.j2 rename to src/djinit/templates/routes.j2 diff --git a/src/templates/runtime_txt.j2 b/src/djinit/templates/runtime_txt.j2 similarity index 100% rename from src/templates/runtime_txt.j2 rename to src/djinit/templates/runtime_txt.j2 diff --git a/src/templates/serializers.j2 b/src/djinit/templates/serializers.j2 similarity index 100% rename from src/templates/serializers.j2 rename to src/djinit/templates/serializers.j2 diff --git a/src/templates/settings_base.j2 b/src/djinit/templates/settings_base.j2 similarity index 100% rename from src/templates/settings_base.j2 rename to src/djinit/templates/settings_base.j2 diff --git a/src/templates/settings_development.j2 b/src/djinit/templates/settings_development.j2 similarity index 100% rename from src/templates/settings_development.j2 rename to src/djinit/templates/settings_development.j2 diff --git a/src/templates/settings_production.j2 b/src/djinit/templates/settings_production.j2 similarity index 100% rename from src/templates/settings_production.j2 rename to src/djinit/templates/settings_production.j2 diff --git a/src/templates/wsgi.j2 b/src/djinit/templates/wsgi.j2 similarity index 100% rename from src/templates/wsgi.j2 rename to src/djinit/templates/wsgi.j2 diff --git a/src/utils.py b/src/djinit/utils.py similarity index 96% rename from src/utils.py rename to src/djinit/utils.py index 71056c0..ac02bbe 100644 --- a/src/utils.py +++ b/src/djinit/utils.py @@ -7,7 +7,7 @@ import os import subprocess from contextlib import contextmanager -from src.scripts.console_ui import UIFormatter +from djinit.scripts.console_ui import UIFormatter def format_file(filename: str) -> None: