add Django model factories for courses
This commit is contained in:
parent
7169dca8a3
commit
47e5d028d1
@ -161,5 +161,5 @@ def generate_fake_accounts_data(num_programs: int, num_students: int, num_parent
|
||||
print(f"Created {len(parents)} parents.")
|
||||
|
||||
|
||||
generate_fake_accounts_data(10, 10, 10)
|
||||
|
||||
generate_fake_accounts_data(10, 10, 10)
|
||||
179
scripts/generate_fake_course_data.py
Normal file
179
scripts/generate_fake_course_data.py
Normal file
@ -0,0 +1,179 @@
|
||||
from typing import Type
|
||||
from factory.django import DjangoModelFactory
|
||||
from factory import SubFactory, LazyAttribute, Iterator
|
||||
from faker import Faker
|
||||
|
||||
from course.models import Program, Course, CourseAllocation,Upload, UploadVideo,CourseOffer, SEMESTER
|
||||
from accounts.models import User, DepartmentHead
|
||||
from core.models import Session
|
||||
|
||||
from .generate_fake_accounts_data import UserFactory, ProgramFactory
|
||||
from .generate_fake_core_data import SessionFactory
|
||||
|
||||
fake = Faker()
|
||||
|
||||
class DepartmentHeadFactory(DjangoModelFactory):
|
||||
class Meta:
|
||||
model = DepartmentHead
|
||||
|
||||
user = SubFactory(UserFactory)
|
||||
department = SubFactory(ProgramFactory)
|
||||
|
||||
|
||||
class ProgramFactory(DjangoModelFactory):
|
||||
"""
|
||||
Factory for creating Program instances.
|
||||
|
||||
Attributes:
|
||||
title (str): The generated title for the program.
|
||||
summary (str): The generated summary for the program.
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
model = Program
|
||||
|
||||
title: str = LazyAttribute(lambda x: fake.sentence(nb_words=3))
|
||||
summary: str = LazyAttribute(lambda x: fake.paragraph())
|
||||
|
||||
class CourseFactory(DjangoModelFactory):
|
||||
"""
|
||||
Factory for creating Course instances.
|
||||
|
||||
Attributes:
|
||||
slug (str): The generated slug for the course.
|
||||
title (str): The generated title for the course.
|
||||
code (str): The generated code for the course.
|
||||
credit (int): The generated credit for the course.
|
||||
summary (str): The generated summary for the course.
|
||||
program (Program): The associated program for the course.
|
||||
level (str): The generated level for the course.
|
||||
year (int): The generated year for the course.
|
||||
semester (str): The generated semester for the course.
|
||||
is_elective (bool): The flag indicating if the course is elective.
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
model = Course
|
||||
|
||||
slug: str = LazyAttribute(lambda x: fake.slug())
|
||||
title: str = LazyAttribute(lambda x: fake.sentence(nb_words=4))
|
||||
code: str = LazyAttribute(lambda x: fake.unique.word())
|
||||
credit: int = LazyAttribute(lambda x: fake.random_int(min=1, max=6))
|
||||
summary: str = LazyAttribute(lambda x: fake.paragraph())
|
||||
program: Type[Program] = SubFactory(ProgramFactory)
|
||||
level: str = Iterator(["Beginner", "Intermediate", "Advanced"])
|
||||
year: int = LazyAttribute(lambda x: fake.random_int(min=1, max=4))
|
||||
semester: str = Iterator([choice[0] for choice in SEMESTER])
|
||||
is_elective: bool = LazyAttribute(lambda x: fake.boolean())
|
||||
|
||||
class CourseAllocationFactory(DjangoModelFactory):
|
||||
"""
|
||||
Factory for creating CourseAllocation instances.
|
||||
|
||||
Attributes:
|
||||
lecturer (User): The associated lecturer for the course allocation.
|
||||
session (Session): The associated session for the course allocation.
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
model = CourseAllocation
|
||||
|
||||
lecturer: Type[User] = SubFactory(UserFactory, is_lecturer=True)
|
||||
session: Type[Session] = SubFactory(SessionFactory)
|
||||
|
||||
class UploadFactory(DjangoModelFactory):
|
||||
"""
|
||||
Factory for creating Upload instances.
|
||||
|
||||
Attributes:
|
||||
title (str): The generated title for the upload.
|
||||
course (Course): The associated course for the upload.
|
||||
file (str): The generated file path for the upload.
|
||||
updated_date (datetime): The generated updated date for the upload.
|
||||
upload_time (datetime): The generated upload time for the upload.
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
model = Upload
|
||||
|
||||
title: str = LazyAttribute(lambda x: fake.sentence(nb_words=3))
|
||||
course = SubFactory(CourseFactory) # Adjust 'yourapp' with your actual app name
|
||||
file: str = LazyAttribute(lambda x: fake.file_path(extension="pdf"))
|
||||
updated_date = fake.date_time_this_year()
|
||||
upload_time = fake.date_time_this_year()
|
||||
|
||||
class UploadVideoFactory(DjangoModelFactory):
|
||||
"""
|
||||
Factory for creating UploadVideo instances.
|
||||
|
||||
Attributes:
|
||||
title (str): The generated title for the video upload.
|
||||
slug (str): The generated slug for the video upload.
|
||||
course (Course): The associated course for the video upload.
|
||||
video (str): The generated video path for the video upload.
|
||||
summary (str): The generated summary for the video upload.
|
||||
timestamp (datetime): The generated timestamp for the video upload.
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
model = UploadVideo
|
||||
|
||||
title: str = LazyAttribute(lambda x: fake.sentence(nb_words=3))
|
||||
slug: str = LazyAttribute(lambda x: fake.slug())
|
||||
course = SubFactory(CourseFactory) # Adjust 'yourapp' with your actual app name
|
||||
video: str = LazyAttribute(lambda x: fake.file_path(extension="mp4"))
|
||||
summary: str = LazyAttribute(lambda x: fake.paragraph())
|
||||
timestamp = fake.date_time_this_year()
|
||||
|
||||
class CourseOfferFactory(DjangoModelFactory):
|
||||
"""
|
||||
Factory for creating CourseOffer instances.
|
||||
|
||||
Attributes:
|
||||
dep_head (DepartmentHead): The associated department head for the course offer.
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
model = CourseOffer
|
||||
|
||||
dep_head = SubFactory(DepartmentHeadFactory)
|
||||
|
||||
|
||||
def generate_fake_course_data(num_programs: int, num_courses: int, num_course_allocations: int, num_uploads: int, num_upload_videos: int, num_course_offers: int) -> None:
|
||||
"""Generate fake data using various factories.
|
||||
|
||||
Args:
|
||||
num_programs (int): Number of fake programs to create.
|
||||
num_courses (int): Number of fake courses to create.
|
||||
num_course_allocations (int): Number of fake course allocations to create.
|
||||
num_uploads (int): Number of fake uploads to create.
|
||||
num_upload_videos (int): Number of fake upload videos to create.
|
||||
num_course_offers (int): Number of fake course offers to create.
|
||||
"""
|
||||
# Generate fake programs
|
||||
programs = ProgramFactory.create_batch(num_programs)
|
||||
print(f"Created {len(programs)} programs.")
|
||||
|
||||
# Generate fake courses
|
||||
courses = CourseFactory.create_batch(num_courses)
|
||||
print(f"Created {len(courses)} courses.")
|
||||
|
||||
# Generate fake course allocations
|
||||
course_allocations = CourseAllocationFactory.create_batch(num_course_allocations)
|
||||
print(f"Created {len(course_allocations)} course allocations.")
|
||||
|
||||
# Generate fake uploads
|
||||
uploads = UploadFactory.create_batch(num_uploads)
|
||||
print(f"Created {len(uploads)} uploads.")
|
||||
|
||||
# Generate fake upload videos
|
||||
upload_videos = UploadVideoFactory.create_batch(num_upload_videos)
|
||||
print(f"Created {len(upload_videos)} upload videos.")
|
||||
|
||||
# Generate fake course offers
|
||||
course_offers = CourseOfferFactory.create_batch(num_course_offers)
|
||||
print(f"Created {len(course_offers)} course offers.")
|
||||
|
||||
|
||||
|
||||
generate_fake_course_data(10, 10, 10, 10, 10, 10)
|
||||
Loading…
x
Reference in New Issue
Block a user