Skip to content

Commit

Permalink
[pre-commit.ci] auto fixes from pre-commit.com hooks
Browse files Browse the repository at this point in the history
for more information, see https://pre-commit.ci
  • Loading branch information
pre-commit-ci[bot] committed Sep 25, 2023
1 parent 56a018d commit b033c0d
Show file tree
Hide file tree
Showing 12 changed files with 121 additions and 88 deletions.
1 change: 0 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,3 @@ updates:
directory: "/" # Location of package manifests
schedule:
interval: "weekly"

6 changes: 3 additions & 3 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ jobs:
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.

# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality


# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
Expand All @@ -61,7 +61,7 @@ jobs:
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

# If the Autobuild fails above, remove it and uncomment the following three lines.
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.

# - run: |
Expand Down
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/rest-start.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 12 additions & 8 deletions djstartlib/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,13 @@
help="Custom Environment Name",
type=lambda p: pathlib.Path(p).absolute(),
)
@click.option("-v", "--virtualenv", is_flag=True, help="Install Environment Is Deprecated")
@click.option('-u', '--url-path', help='Set Custom URL Path for your App')
@click.option(
"-v",
"--virtualenv",
is_flag=True,
help="Install Environment Is Deprecated",
)
@click.option("-u", "--url-path", help="Set Custom URL Path for your App")
def main(**kwargs):
"""
Prepare a new Django project quickly and automatically and,
Expand All @@ -29,17 +34,16 @@ def main(**kwargs):
fg="white",
bg="red",
)
click.secho("Creating a virtual environment is a best practice!",
fg="green")
click.secho(
"Creating a virtual environment is a best practice!", fg="green"
)

app = DjangoStart(
kwargs['name'],
app=kwargs['app_name'],
project=kwargs['project_name']
kwargs["name"], app=kwargs["app_name"], project=kwargs["project_name"]
)

app.setup_project()
app.setup_app(app_url=kwargs['url_path'] or '')
app.setup_app(app_url=kwargs["url_path"] or "")


if __name__ == "__main__":
Expand Down
51 changes: 23 additions & 28 deletions djstartlib/models/app_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,25 @@
import click

from models.utils import Environment
from models.utils.helper import (build_view_func, build_views_urls,
executable_python_command, generate_html,
warn_stdout)
from models.utils.helper import (
build_view_func,
build_views_urls,
executable_python_command,
generate_html,
warn_stdout,
)


class AppManager(Environment):
def __init__(self, *args, **kwargs):
super().__init__(**kwargs)
self.__app_name = kwargs.get('app', None)
self.__app_name = kwargs.get("app", None)
self.__workdir = os.path.join(
self.get_workdir(),
f'{self.get_app_name()}'
self.get_workdir(), f"{self.get_app_name()}"
)
self.__views = os.path.join(self.workdir, 'views.py')
self.__urls = os.path.join(self.workdir, 'urls.py')
self.__templates = os.path.join(self.workdir, 'templates')
self.__views = os.path.join(self.workdir, "views.py")
self.__urls = os.path.join(self.workdir, "urls.py")
self.__templates = os.path.join(self.workdir, "templates")

@property
def app_name(self) -> str:
Expand All @@ -43,55 +46,47 @@ def urls(self) -> str:
def create_app(self) -> None:
if self.app_name not in os.listdir(self.get_workdir()):
click.secho(
f"\U00002728 Create '{self.app_name}' App...",
fg="blue"
f"\U00002728 Create '{self.app_name}' App...", fg="blue"
)
executable_python_command(f"manage.py startapp {self.app_name}")
else:
warn_stdout(f'"{self.app_name}" already exist!')

def update_view(self) -> None:
click.secho(
f"\U0001F304 Create '{self.app_name}' Views...",
fg="blue"
)
click.secho(f"\U0001F304 Create '{self.app_name}' Views...", fg="blue")

self.read_file(self.views)
if "# Create your views here.\n" in self.line_list:
code_of_block = build_view_func().substitute(
app_name=self.app_name,
html_file="index.html"
app_name=self.app_name, html_file="index.html"
)
self.replace_line(
self.index("# Create your views here.\n"),
code_of_block
self.index("# Create your views here.\n"), code_of_block
)
self.write(self.views)

else:
warn_stdout('"home" View is Exists!')

def create_urls(self) -> None:
click.secho(
f"\U0001F517 Create {self.app_name} URLs...",
fg="blue"
)
click.secho(f"\U0001F517 Create {self.app_name} URLs...", fg="blue")

block_of_code = build_views_urls().substitute(view_name="home")
self.write(self.urls, value=block_of_code)

def create_templates(self) -> None:
click.secho(
f"\U0001F389 Generate '{self.app_name}' Index Page...",
fg="blue"
f"\U0001F389 Generate '{self.app_name}' Index Page...", fg="blue"
)

index_path = f'{self.templates}{os.sep}{self.app_name}'
index_path = f"{self.templates}{os.sep}{self.app_name}"
if not os.path.exists(self.templates):
os.mkdir(self.templates)

if not os.path.exists(index_path):
os.mkdir(index_path)
self.write(f'{index_path}{os.sep}index.html', value=generate_html())
self.write(
f"{index_path}{os.sep}index.html", value=generate_html()
)
else:
warn_stdout('Index.html is Already exists.')
warn_stdout("Index.html is Already exists.")
2 changes: 1 addition & 1 deletion djstartlib/models/djstart_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def setup_project(self):
self.project_cls.create_project()
self.project_cls.requirements_extract()

def setup_app(self, app_url: str = ''):
def setup_app(self, app_url: str = ""):
self.app_cls.create_app()
self.project_cls.update_settings()
self.project_cls.update_urls(path=app_url)
Expand Down
39 changes: 26 additions & 13 deletions djstartlib/models/project_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,32 @@
import click

from models.utils import Environment
from models.utils.helper import (executable_django_command, install_dep,
requirements_extract, upgrade_pip,
warn_stdout)
from models.utils.helper import (
executable_django_command,
install_dep,
requirements_extract,
upgrade_pip,
warn_stdout,
)


class ProjectManager(Environment):
def __init__(self, *args, **kwargs):
super().__init__(**kwargs)
self.__urls = os.path.join(
self.get_workdir(), f'{self.get_project_name()}/urls.py'
self.get_workdir(), f"{self.get_project_name()}/urls.py"
)
self.__settings = os.path.join(
self.get_workdir(), f'{self.get_project_name()}/settings.py'
self.get_workdir(), f"{self.get_project_name()}/settings.py"
)

@property
def urls_path(self) -> str: return self.__urls
def urls_path(self) -> str:
return self.__urls

@property
def settings_path(self) -> str: return self.__settings
def settings_path(self) -> str:
return self.__settings

def update_settings(self) -> None:
self.read_file(self.settings_path)
Expand All @@ -34,15 +40,17 @@ def update_settings(self) -> None:
warn_stdout(f'"{self.get_app_name()}" is installed!')

def update_import_statment(self):
import_statment = 'from django.urls import include\n'
if 'from django.urls import path, include\n' in self.line_list:
import_statment = "from django.urls import include\n"
if "from django.urls import path, include\n" in self.line_list:
return 0
elif import_statment not in self.line_list:
self.insert_line('from django.urls import path\n', import_statment)
self.insert_line("from django.urls import path\n", import_statment)

def update_urls(self, path: str) -> None:
self.read_file(self.urls_path)
view_path = f"\tpath('{path}', include('{self.get_app_name()}.urls')),\n"
view_path = (
f"\tpath('{path}', include('{self.get_app_name()}.urls')),\n"
)
self.update_import_statment()

if view_path not in self.line_list:
Expand All @@ -68,7 +76,12 @@ def requirements_extract() -> None:

def create_project(self) -> None:
if self.get_project_name() not in os.listdir(self.get_workdir()):
click.secho(f"\U00002728 Create '{self.get_project_name()}' Project", fg="blue")
executable_django_command(f"startproject {self.get_project_name()} .")
click.secho(
f"\U00002728 Create '{self.get_project_name()}' Project",
fg="blue",
)
executable_django_command(
f"startproject {self.get_project_name()} ."
)
else:
warn_stdout(f'"{self.get_project_name()}" Already exist!')
47 changes: 27 additions & 20 deletions djstartlib/models/utils/environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,19 @@

class Environment:
def __init__(self, **kwargs):
self.__app_name = kwargs.get('app')
self.__project_name = kwargs.get('project')
self.__app_name = kwargs.get("app")
self.__project_name = kwargs.get("project")
self.__workdir = os.getcwd()
self.__exec = os.getenv('PYTHONEXEC')
self.__django_admin = os.getenv('DJANGOADMIN')
self.__exec = os.getenv("PYTHONEXEC")
self.__django_admin = os.getenv("DJANGOADMIN")
self.__line_list = []

@property
def line_list(self) -> list: return self.__line_list
def line_list(self) -> list:
return self.__line_list

def index(self, value: str) -> int: return self.line_list.index(value)
def index(self, value: str) -> int:
return self.line_list.index(value)

def insert_line(self, flag: str, value: str) -> None:
self.line_list.insert(self.index(flag), value)
Expand All @@ -31,25 +33,30 @@ def read_file(self, file: str) -> list:
f.close()
return self.line_list

def write(self, file_path: str, value = None) -> None:
with open(file_path, 'w') as f:
f.write(''.join(value or self.line_list))
def write(self, file_path: str, value=None) -> None:
with open(file_path, "w") as f:
f.write("".join(value or self.line_list))
f.close()

def get_app_name(self) -> str: return self.__app_name
def get_app_name(self) -> str:
return self.__app_name

def get_project_name(self) -> str: return self.__project_name
def get_project_name(self) -> str:
return self.__project_name

def get_workdir(self) -> str: return self.__workdir
def get_workdir(self) -> str:
return self.__workdir

def get_exec(self) -> str: return self.__exec
def get_exec(self) -> str:
return self.__exec

def get_django_admin(self) -> str: return self.__django_admin
def get_django_admin(self) -> str:
return self.__django_admin

def test(self):
print(f'Call {self.__class__.__name__}')
print(f'App Name: {self.get_app_name()}')
print(f'Project Name: {self.get_project_name()}')
print(f'Workdir: {self.get_workdir()}')
print(f'Python Path: {self.get_exec()}')
print(f'Django Admin: {self.get_django_admin()}')
print(f"Call {self.__class__.__name__}")
print(f"App Name: {self.get_app_name()}")
print(f"Project Name: {self.get_project_name()}")
print(f"Workdir: {self.get_workdir()}")
print(f"Python Path: {self.get_exec()}")
print(f"Django Admin: {self.get_django_admin()}")
32 changes: 23 additions & 9 deletions djstartlib/models/utils/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,18 @@ def create_env(env_name_path):
shell=True,
)
if platform.system() == "Windows":
os.environ['PYTHONEXEC'] = os.path.join(env_name_path, 'Scripts/python.exe')
os.environ.setdefault('DJANGOADMIN', os.path.join(env_name_path, 'Scripts/django-admin.exe'))
os.environ["PYTHONEXEC"] = os.path.join(
env_name_path, "Scripts/python.exe"
)
os.environ.setdefault(
"DJANGOADMIN",
os.path.join(env_name_path, "Scripts/django-admin.exe"),
)
else:
os.environ['PYTHONEXEC'] = os.path.join(env_name_path, 'bin/python3')
os.environ.setdefault('DJANGOADMIN', os.path.join(env_name_path, 'bin/django-admin'))
os.environ["PYTHONEXEC"] = os.path.join(env_name_path, "bin/python3")
os.environ.setdefault(
"DJANGOADMIN", os.path.join(env_name_path, "bin/django-admin")
)


def executable_python_command(command):
Expand All @@ -35,8 +42,12 @@ def executable_python_command(command):
shell=True,
)
if proc:
if platform.system() != 'Windows':
click.secho("check your installed python3-env and python3-pip", fg="white", bg="red")
if platform.system() != "Windows":
click.secho(
"check your installed python3-env and python3-pip",
fg="white",
bg="red",
)
sys.exit(1)
except KeyError:
click.secho("Be sure to set up PYTHONPATH", fg="white", bg="red")
Expand Down Expand Up @@ -77,14 +88,17 @@ def build_view_func():
html_file
:return: str
"""
s = Template(f"""
s = Template(
f"""
def home(request):
return render(request, '$app_name{os.sep}$html_file')""")
return render(request, '$app_name{os.sep}$html_file')"""
)
return s


def build_views_urls():
s = Template("""from django.urls import path
s = Template(
"""from django.urls import path
from . import views
urlpatterns = [
Expand Down
Loading

0 comments on commit b033c0d

Please sign in to comment.