karigor 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- app/__init__.py +0 -0
- app/cli.py +73 -0
- app/controllers/ProductController.py +3 -0
- app/controllers/__init__.py +0 -0
- app/models.py +24 -0
- karigor-0.1.0.dist-info/METADATA +8 -0
- karigor-0.1.0.dist-info/RECORD +10 -0
- karigor-0.1.0.dist-info/WHEEL +5 -0
- karigor-0.1.0.dist-info/entry_points.txt +2 -0
- karigor-0.1.0.dist-info/top_level.txt +1 -0
app/__init__.py
ADDED
|
File without changes
|
app/cli.py
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import click
|
|
2
|
+
import os
|
|
3
|
+
from sqlalchemy import create_engine
|
|
4
|
+
from app.models import Base, DATABASE_URL
|
|
5
|
+
|
|
6
|
+
@click.group()
|
|
7
|
+
def cli():
|
|
8
|
+
"""আমার পাইথন প্রজেক্টের কাস্টম আর্টিসান কমান্ড লাইন।"""
|
|
9
|
+
pass
|
|
10
|
+
|
|
11
|
+
# ==========================================
|
|
12
|
+
# ১. CONTROLLER তৈরি করার কমান্ড
|
|
13
|
+
# ==========================================
|
|
14
|
+
@cli.command(name="make:controller")
|
|
15
|
+
@click.argument('name')
|
|
16
|
+
def make_controller(name):
|
|
17
|
+
"""একটি নতুন কন্ট্রোলার ক্লাস তৈরি করার কমান্ড।"""
|
|
18
|
+
folder_path = os.path.join("app", "controllers")
|
|
19
|
+
|
|
20
|
+
if not os.path.exists(folder_path):
|
|
21
|
+
os.makedirs(folder_path)
|
|
22
|
+
|
|
23
|
+
file_name = f"{name}Controller.py"
|
|
24
|
+
file_path = os.path.join(folder_path, file_name)
|
|
25
|
+
|
|
26
|
+
if os.path.exists(file_path):
|
|
27
|
+
click.secho(" ERROR ", fg="white", bg="red", bold=True, nl=False)
|
|
28
|
+
click.secho(f" Controller [{file_name}] already exists!", fg="red")
|
|
29
|
+
return
|
|
30
|
+
|
|
31
|
+
# কন্ট্রোলারের ভেতরের কোডের টেমপ্লেট
|
|
32
|
+
controller_template = f"""class {name}Controller:
|
|
33
|
+
def index(self):
|
|
34
|
+
return {{"message": "Welcome to {name}Controller"}}
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
with open(file_path, "w", encoding="utf-8") as f:
|
|
38
|
+
f.write(controller_template)
|
|
39
|
+
|
|
40
|
+
click.secho(" INFO ", fg="black", bg="green", bold=True, nl=False)
|
|
41
|
+
click.secho(f" Controller [app/controllers/{file_name}] created successfully.", fg="green")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# ==========================================
|
|
45
|
+
# ২. DATABASE MIGRATION রান করার কমান্ড
|
|
46
|
+
# ==========================================
|
|
47
|
+
@cli.command(name="migrate")
|
|
48
|
+
@click.option('--fresh', is_flag=True, help='পুরো ডেটাবেজ ডিলিট করে নতুন করে মাইগ্রেট করবে।')
|
|
49
|
+
def migrate(fresh):
|
|
50
|
+
"""ডেটাবেজ মাইগ্রেশন রান করার কমান্ড।"""
|
|
51
|
+
engine = create_engine(DATABASE_URL)
|
|
52
|
+
|
|
53
|
+
if fresh:
|
|
54
|
+
click.secho(" WARN ", fg="black", bg="yellow", bold=True, nl=False)
|
|
55
|
+
click.secho(" Dropping all tables...", fg="yellow")
|
|
56
|
+
Base.metadata.drop_all(engine)
|
|
57
|
+
|
|
58
|
+
click.secho(" INFO ", fg="black", bg="green", bold=True, nl=False)
|
|
59
|
+
click.secho(" Running migrations...", fg="green")
|
|
60
|
+
|
|
61
|
+
# লারাভেলের মতো ফিল দেওয়ার জন্য প্রিন্ট
|
|
62
|
+
tables = Base.metadata.tables.keys()
|
|
63
|
+
for table in tables:
|
|
64
|
+
click.echo(f" ⇛ Migrating: create_{table}_table")
|
|
65
|
+
|
|
66
|
+
# আসল ডেটাবেজ টেবিল তৈরি করার কমান্ড
|
|
67
|
+
Base.metadata.create_all(engine)
|
|
68
|
+
|
|
69
|
+
for table in tables:
|
|
70
|
+
click.secho(f" ✔ Migrated: create_{table}_table", fg="green")
|
|
71
|
+
|
|
72
|
+
click.secho(" INFO ", fg="black", bg="green", bold=True, nl=False)
|
|
73
|
+
click.secho(" Database migration completed successfully.", fg="green")
|
|
File without changes
|
app/models.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# আগের ভুল লাইন: from sqlalchemy import create_backend, Column, Integer, String, DateTime
|
|
2
|
+
# পরিবর্তন করে নিচের লাইনটি লিখুন:
|
|
3
|
+
from sqlalchemy import Column, Integer, String, DateTime
|
|
4
|
+
from sqlalchemy.orm import declarative_base
|
|
5
|
+
import datetime
|
|
6
|
+
|
|
7
|
+
Base = declarative_base()
|
|
8
|
+
DATABASE_URL = "sqlite:///database.db"
|
|
9
|
+
|
|
10
|
+
# ইউজার টেবিল মডেল (টেস্ট করার জন্য)
|
|
11
|
+
class User(Base):
|
|
12
|
+
__tablename__ = 'users'
|
|
13
|
+
|
|
14
|
+
id = Column(Integer, primary_key=True)
|
|
15
|
+
name = Column(String(50), nullable=False)
|
|
16
|
+
email = Column(String(50), unique=True, nullable=False)
|
|
17
|
+
created_at = Column(DateTime, default=datetime.datetime.utcnow)
|
|
18
|
+
|
|
19
|
+
class Post(Base):
|
|
20
|
+
__tablename__ = 'posts'
|
|
21
|
+
|
|
22
|
+
id = Column(Integer, primary_key=True)
|
|
23
|
+
title = Column(String(100), nullable=False)
|
|
24
|
+
content = Column(String(500))
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
app/cli.py,sha256=ljpu8sDy9yDNCi92pHjLMeUQaHABelFdzG5dgvfoDLM,3110
|
|
3
|
+
app/models.py,sha256=KYnarFqNeDKAMUD1GJsEOtwR54s2AAEPjy65vqSJVIg,921
|
|
4
|
+
app/controllers/ProductController.py,sha256=jZZrQuVr6OL7Ug2XAy7wb3xh6HOaQCBE7-AibgtvbLo,105
|
|
5
|
+
app/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
karigor-0.1.0.dist-info/METADATA,sha256=k0D8x5Nb5nTK3IzFsYezhxH1G14usyEhXZ1l_fOSnxQ,215
|
|
7
|
+
karigor-0.1.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
8
|
+
karigor-0.1.0.dist-info/entry_points.txt,sha256=1TWvzg310yC_jv2xOrhVM7AQL2jpVoBBpkHGjbNkH2c,40
|
|
9
|
+
karigor-0.1.0.dist-info/top_level.txt,sha256=io9g7LCbfmTG1SFKgEOGXmCFB9uMP2H5lerm0HiHWQE,4
|
|
10
|
+
karigor-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
app
|