Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐛(edx) fix mysql seeding script for development #40

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions bin/seed_edx_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,22 @@
import asyncio

from sqlalchemy import create_engine
from sqlalchemy.orm import Session

from mork.conf import settings
from mork.edx.factories.auth import EdxAuthUserFactory
from mork.edx.factories.base import BaseSQLAlchemyModelFactory, Session
from mork.edx.models.base import Base


async def seed_edx_database():
"""Seed the MySQL edx database with mocked data."""
engine = create_engine(settings.EDX_DB_URL)
session = Session(engine)
EdxAuthUserFactory._meta.sqlalchemy_session = session # noqa: SLF001
EdxAuthUserFactory._meta.sqlalchemy_session_persistence = "commit" # noqa: SLF001
Session.configure(bind=engine)
BaseSQLAlchemyModelFactory._meta.sqlalchemy_session = Session # noqa: SLF001
Base.metadata.create_all(engine)

EdxAuthUserFactory.create_batch(1000)
EdxAuthUserFactory.create_batch(100)
Session.commit()


if __name__ == "__main__":
Expand Down
44 changes: 18 additions & 26 deletions src/app/mork/edx/factories/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
AuthUserprofile,
)

from .base import faker, session
from .base import BaseSQLAlchemyModelFactory, faker
from .bulk import EdxBulkEmailCourseemailFactory, EdxBulkEmailOptoutFactory
from .certificates import (
EdxCertificatesCertificatehtmlviewconfigurationFactory,
Expand Down Expand Up @@ -42,7 +42,6 @@
EdxStudentHistoricalcourseenrollmentFactory,
EdxStudentLanguageproficiencyFactory,
EdxStudentLoginfailureFactory,
EdxStudentManualenrollmentauditFactory,
EdxStudentPendingemailchangeFactory,
EdxStudentUserstandingFactory,
)
Expand All @@ -54,56 +53,52 @@
)


class EdxAuthRegistrationFactory(factory.alchemy.SQLAlchemyModelFactory):
class EdxAuthRegistrationFactory(BaseSQLAlchemyModelFactory):
"""Factory for the `auth_registration` table."""

class Meta:
"""Factory configuration."""

model = AuthRegistration
sqlalchemy_session = session

id = factory.Sequence(lambda n: n + 1)
user_id = factory.Sequence(lambda n: n + 1)
activation_key = factory.Faker("hexify", text="^" * 32)


class EdxAuthtokenTokenFactory(factory.alchemy.SQLAlchemyModelFactory):
class EdxAuthtokenTokenFactory(BaseSQLAlchemyModelFactory):
"""Factory for the `authtoken_token` table."""

class Meta:
"""Factory configuration."""

model = AuthtokenToken
sqlalchemy_session = session

key = factory.Faker("hexify", text="^" * 40)
user_id = factory.Sequence(lambda n: n + 1)
created = factory.Faker("date_time")


class EdxAuthUserGroupsFactory(factory.alchemy.SQLAlchemyModelFactory):
class EdxAuthUserGroupsFactory(BaseSQLAlchemyModelFactory):
"""Factory for the `auth_user_groups` table."""

class Meta:
"""Factory configuration."""

model = AuthUserGroups
sqlalchemy_session = session

id = factory.Sequence(lambda n: n + 1)
user_id = factory.Sequence(lambda n: n + 1)
group_id = factory.Sequence(lambda n: n + 1)


class EdxAuthUserprofileFactory(factory.alchemy.SQLAlchemyModelFactory):
class EdxAuthUserprofileFactory(BaseSQLAlchemyModelFactory):
"""Factory for the `auth_userprofile` table."""

class Meta:
"""Factory configuration."""

model = AuthUserprofile
sqlalchemy_session = session

id = factory.Sequence(lambda n: n + 1)
user_id = factory.Sequence(lambda n: n + 1)
Expand Down Expand Up @@ -131,20 +126,19 @@ class Meta:
)


class EdxAuthUserFactory(factory.alchemy.SQLAlchemyModelFactory):
class EdxAuthUserFactory(BaseSQLAlchemyModelFactory):
"""Factory for the `auth_user` table."""

class Meta:
"""Factory configuration."""

model = AuthUser
sqlalchemy_session = session

class Params:
"""Factory parameter to toggle generation of protected tables on or off."""

with_protected_tables = factory.Trait(
authtoken_token=factory.SubFactory(
authtoken_token=factory.RelatedFactory(
EdxAuthtokenTokenFactory, user_id=factory.SelfAttribute("..id")
),
certificates_certificatehtmlviewconfiguration=factory.RelatedFactoryList(
Expand All @@ -171,7 +165,7 @@ class Params:
size=3,
updated_user_id=factory.SelfAttribute("..id"),
),
course_creators_coursecreator=factory.SubFactory(
course_creators_coursecreator=factory.RelatedFactory(
EdxCourseCreatorsCoursecreatorFactory,
user_id=factory.SelfAttribute("..id"),
),
Expand Down Expand Up @@ -207,13 +201,13 @@ class Params:
date_joined = factory.Faker("date_time")
last_login = factory.Faker("date_time")

auth_registration = factory.SubFactory(
auth_registration = factory.RelatedFactory(
EdxAuthRegistrationFactory, user_id=factory.SelfAttribute("..id")
)
auth_userprofile = factory.SubFactory(
auth_userprofile = factory.RelatedFactory(
EdxAuthUserprofileFactory, user_id=factory.SelfAttribute("..id")
)
auth_user_groups = factory.SubFactory(
auth_user_groups = factory.RelatedFactory(
EdxAuthUserGroupsFactory, user_id=factory.SelfAttribute("..id")
)
bulk_email_courseemail = factory.RelatedFactoryList(
Expand Down Expand Up @@ -300,7 +294,7 @@ class Params:
size=3,
user_id=factory.SelfAttribute("..id"),
)
proctoru_proctoruuser = factory.SubFactory(
proctoru_proctoruuser = factory.RelatedFactory(
EdxProctoruProctoruuserFactory, student_id=factory.SelfAttribute("..id")
)
student_anonymoususerid = factory.RelatedFactoryList(
Expand All @@ -326,29 +320,25 @@ class Params:
"history_user",
size=3,
history_user_id=factory.SelfAttribute("..id"),
user_id=factory.SelfAttribute("..id"),
)
student_historicalcourseenrollment_user = factory.RelatedFactoryList(
EdxStudentHistoricalcourseenrollmentFactory,
"user",
size=3,
user_id=factory.SelfAttribute("..id"),
history_user_id=factory.SelfAttribute("..id"),
)
student_loginfailure = factory.RelatedFactoryList(
EdxStudentLoginfailureFactory,
"user",
size=3,
user_id=factory.SelfAttribute("..id"),
)
student_manualenrollmentaudit = factory.RelatedFactoryList(
EdxStudentManualenrollmentauditFactory,
"enrolled_by",
size=3,
enrolled_by_id=factory.SelfAttribute("..id"),
)
student_pendingemailchange = factory.SubFactory(
student_pendingemailchange = factory.RelatedFactory(
EdxStudentPendingemailchangeFactory, user_id=factory.SelfAttribute("..id")
)
student_userstanding_user = factory.SubFactory(
student_userstanding_user = factory.RelatedFactory(
EdxStudentUserstandingFactory,
changed_by_id=factory.SelfAttribute("..id"),
user_id=factory.SelfAttribute("..id"),
Expand All @@ -365,11 +355,13 @@ class Params:
"reviewing_user",
size=3,
reviewing_user_id=factory.SelfAttribute("..id"),
user_id=factory.SelfAttribute("..id"),
)
)
verify_student_softwaresecurephotoverification_user = factory.RelatedFactoryList(
EdxVerifyStudentSoftwaresecurephotoverificationFactory,
"user",
size=3,
user_id=factory.SelfAttribute("..id"),
reviewing_user_id=factory.SelfAttribute("..id"),
)
17 changes: 15 additions & 2 deletions src/app/mork/edx/factories/base.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,25 @@
"""Factory base configuration."""

import factory
from faker import Faker
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from sqlalchemy.orm import scoped_session, sessionmaker

from mork.edx.models.base import Base

faker = Faker()
engine = create_engine("sqlite+pysqlite:///:memory:", echo=False, pool_pre_ping=True)
session = Session(engine)
Base.metadata.create_all(engine)

Session = scoped_session(sessionmaker())


class BaseSQLAlchemyModelFactory(factory.alchemy.SQLAlchemyModelFactory):
"""Base factory class for SQLAlchemy models."""

class Meta:
"""Factory configuration."""

abstract = True
sqlalchemy_session = Session
sqlalchemy_session_persistence = None
8 changes: 3 additions & 5 deletions src/app/mork/edx/factories/bulk.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@

from mork.edx.models.bulk import BulkEmailCourseemail, BulkEmailOptout

from .base import faker, session
from .base import BaseSQLAlchemyModelFactory, faker


class EdxBulkEmailCourseemailFactory(factory.alchemy.SQLAlchemyModelFactory):
class EdxBulkEmailCourseemailFactory(BaseSQLAlchemyModelFactory):
"""Factory for the `bulk_email_courseemail` table."""

class Meta:
"""Factory configuration."""

model = BulkEmailCourseemail
sqlalchemy_session = session

id = factory.Sequence(lambda n: n + 1)
sender_id = factory.Sequence(lambda n: n + 1)
Expand All @@ -30,14 +29,13 @@ class Meta:
from_addr = factory.Faker("text")


class EdxBulkEmailOptoutFactory(factory.alchemy.SQLAlchemyModelFactory):
class EdxBulkEmailOptoutFactory(BaseSQLAlchemyModelFactory):
"""Factory for the `bulk_email_optout` table."""

class Meta:
"""Factory configuration."""

model = BulkEmailOptout
sqlalchemy_session = session

id = factory.Sequence(lambda n: n + 1)
course_id = factory.Sequence(lambda n: f"course-v1:edX+{faker.pystr()}+{n}")
Expand Down
10 changes: 3 additions & 7 deletions src/app/mork/edx/factories/certificates.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,18 @@
CertificatesGeneratedcertificate,
)

from .base import faker, session
from .base import BaseSQLAlchemyModelFactory, faker


class EdxCertificatesCertificatehtmlviewconfigurationFactory(
factory.alchemy.SQLAlchemyModelFactory
BaseSQLAlchemyModelFactory
):
"""Factory for the `certificates_certificatehtmlviewconfiguration` table."""

class Meta:
"""Factory configuration."""

model = CertificatesCertificatehtmlviewconfiguration
sqlalchemy_session = session

id = factory.Sequence(lambda n: n + 1)
change_date = factory.Faker("date_time")
Expand All @@ -28,16 +27,13 @@ class Meta:
configuration = factory.Faker("pystr")


class EdxCertificatesGeneratedCertificateFactory(
factory.alchemy.SQLAlchemyModelFactory
):
class EdxCertificatesGeneratedCertificateFactory(BaseSQLAlchemyModelFactory):
"""Factory for the `certificates_generatedcertificate` table."""

class Meta:
"""Factory configuration."""

model = CertificatesGeneratedcertificate
sqlalchemy_session = session

id = factory.Sequence(lambda n: n + 1)
user_id = factory.Sequence(lambda n: n + 1)
Expand Down
5 changes: 2 additions & 3 deletions src/app/mork/edx/factories/contentstore.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@

from mork.edx.models.contentstore import ContentstoreVideouploadconfig

from .base import session
from .base import BaseSQLAlchemyModelFactory


class EdxContentstoreVideouploadconfigFactory(factory.alchemy.SQLAlchemyModelFactory):
class EdxContentstoreVideouploadconfigFactory(BaseSQLAlchemyModelFactory):
"""Model for the `contentstore_videouploadconfig` table."""

class Meta:
"""Factory configuration."""

model = ContentstoreVideouploadconfig
sqlalchemy_session = session

id = factory.Sequence(lambda n: n + 1)
change_date = factory.Faker("date_time")
Expand Down
Loading