def make_standard_course_lesson( course, title="Lesson", active=True, language="EN", slug="lesson", order=1 ): lesson = datamodels.Lesson( course=course, title=title, active=active, language=language, slug=slug, order=order, ) return lesson
def course_add_edit_intro_lesson(user, course, course_slug, institute=""): form = AjaxCSRFTokenForm(request.form) intro_lesson = course.intro_lesson if form.validate() and "intro_lesson" in request.form: db = datamodels.get_session() slug = "intro-lesson" if (datamodels.get_lesson_by_slugs(course.slug, "intro-lesson") is not None and not intro_lesson): slug = slug + "-" + str(uuid4())[:3] if intro_lesson: segment = intro_lesson.intro_segment set_segment_video_url(segment, request.form["segment_url"]) html = "" else: intro_lesson = datamodels.Lesson( title="Intro lesson", slug=slug, description="Intro lesson video", order=0, course=course, ) db.add(intro_lesson) segment = datamodels.Segment( lesson=intro_lesson, order=0, type="video", title="Introduction", barrier=SegmentBarrierEnum.normal, video_type=VideoTypeEnum.standard, url=request.form["segment_url"], duration_seconds=0, slug="intro-segment", ) set_segment_video_url(segment, request.form["segment_url"]) html = render_intro(segment) db.add(segment) db.commit() return jsonify({ "message": "Intro lesson {}".format("updated" if not html else "added"), "html": html, }) else: return jsonify({"message": "Couldn't create intro lesson"}), 400
def add(user, course, course_slug, lesson_id=None, institute=""): form = AddLessonForm(request.form) if form.validate(): lesson = datamodels.Lesson(course=course, order=len(course.lessons) + 1) lesson.title = form.title.data lesson.description = form.description.data lesson.slug = slugify(form.title.data) db = datamodels.get_session() db.add(lesson) db.commit() return redirect("/course/{}/lessons/{}/edit".format( course.slug, lesson.id)) else: for error in form.errors: flash(error) return redirect("/course/{}/edit".format(course.slug))
def reseed(): session = datamodels.get_session() for student in stubs.students: user = copy.deepcopy(student) password = user.pop("password") u = datamodels.User(**user) u.password = password session.add(u) session.commit() c = datamodels.Course( title="Into to Social Enterprise", slug="fitzroy-academy", course_code="abc123", target_audience="Super early stage social enterprise founders, starting your first business or a new project from scratch.", skill_level="Introduction.", visibility="public", info="Start here! Basic business models and customer discovery, to pitching for investment. тЭдя╕П ЁЯЪА", workload_summary="This course will take 20-30 hours on average, and is best done in teams.", summary_html=""" <p><strong>Go from zero to one:</strong> From a basic idea to early customers, business models and getting the numbers right.</p> <p>We don't need any previous business experience, but by the end you'll cover quite complex topics like financial modelling, </p> <p><strong>On the social impact</strong> side of things, you'll define your impact model, look into creating behaviour change that lasts, and maybe even think about partnering with another organisation to create impact.</p> """, cover_image="/static/assets/images/lessons/customer-interviews.jpg", guest_access=True, draft=False, workload_title="", workload_subtitle="", ) session.add(c) session.commit() c.add_instructor(datamodels.get_user(1)) # Homer c.add_instructor(datamodels.get_user(2)) # Marge c.enroll(datamodels.get_user(3)) # Bart c.enroll(datamodels.get_user(4)) # Lisa c.enroll(datamodels.get_user(5)) # Maggie session.add(c) session.commit() for i, lesson in enumerate(stubs.lessons): lesson = copy.deepcopy(lesson) resources = lesson.pop("resources") segments = lesson.pop("segments") lesson.pop("id") lesson.pop("course_id") lesson["language"] = "en" new_lesson = datamodels.Lesson(**lesson) new_lesson.course = c c.lessons.append(new_lesson) session.add(new_lesson) session.commit() for j, segment in enumerate(segments): segment = copy.deepcopy(segment) segment["duration_seconds"] = get_seconds(segment.pop("duration")) segment.pop("lesson_id") segment.pop("course_id") segment.pop("template") # ultimately derived from external URL segment["slug"] = segment.pop("id") segment["language"] = "en" segment["type"] = SegmentType.video s = datamodels.Segment(**segment) new_lesson.segments.append(s) s.lesson = new_lesson session.add(s) for j, resource in enumerate(resources): resource = copy.deepcopy(resource) resource["language"] = resource.pop("lang") resource["slug"] = resource.pop("id") resource["order"] = j r = datamodels.Resource(**resource) r.lesson = new_lesson new_lesson.resources.append(r) session.add(r) session.commit() for user_progress in stubs.user_segment_progress: user = datamodels.User.find_by_email(user_progress["email"]) for lesson in user_progress["lessons"]: for slug, progress in lesson["progress"].items(): # we can search segments by slug because in stubs segments slugs are unique segment = ( datamodels.Segment.objects() .filter(datamodels.Segment.slug == slug) .first() ) datamodels.SegmentUserProgress.save_user_progress( segment.id, user.id, progress ) # default institute, whitout subdomain fitz_institute = datamodels.Institute(name="Fitzroyacademy", logo="", slug="") session.add(fitz_institute) session.commit() fitz_institute.add_admin(datamodels.get_user(1)) # Homer institute1 = datamodels.Institute(name="Jedi Temple", logo="", slug="jeditemple") session.add(institute1) session.commit() institute1.add_admin(datamodels.get_user(3)) # Bart session.commit()