def delete_teacher(user, course, course_slug, lesson_id, teacher_id, institute=""): lesson = datamodels.Course.find_lesson_by_course_slug_and_id( course.slug, lesson_id) if not lesson: return jsonify({ "success": False, "message": "Wrong lesson or course" }), 400 if not datamodels.get_user(teacher_id): return jsonify({"success": False, "message": "No such teacher"}), 400 removed = lesson.remove_teacher(teacher_id) return jsonify({ "success": removed, "teacher_id": teacher_id, "message": "Teacher removed" })
def remove_user(user, user_id=None, access_type="teacher", institute=""): institute = datamodels.Institute.find_by_slug(institute) if not institute or (not user.super_admin and not institute.is_admin(user)): raise abort( 404, "No such institute or you don't have permissions to edit it") if user.id == user_id and access_type == InstitutePermissionEnum.admin.name: return ( jsonify({ "success": False, "message": "You can't remove yourself from an admin role", }), 400, ) user_to_remove = datamodels.get_user(user_id) if not user_to_remove: return jsonify({"success": False, "message": "No such user"}), 400 removed = institute.remove_user(user_to_remove, access_type) return jsonify({ "success": removed, "teacher_id": user_id, "message": "User removed from role {}".format(access_type), })
def test_user_creation(self): u = self.makeUser( id=1, first_name="Marge", last_name="Simpson", email="*****@*****.**", password="******", ) self.session.add(u) u2 = datamodels.get_user(1) self.assertEqual(u2.full_name, "Marge Simpson") self.assertEqual(u2.email, "*****@*****.**") self.assertTrue(u2.check_password, "password")
def test_student_enrollment(self): u = self.makeUser(id=1) self.session.add(u) c = self.make_standard_course(slug="abc") self.session.add(c) self.session.commit() c.enroll(u) u2 = datamodels.get_user(1) u3 = self.makeUser(id=2, email="*****@*****.**", username="******") self.session.add(u3) c.enroll(u3) self.assertEqual(len(u2.courses), 1) self.assertEqual(u2.courses[0].id, 1) self.assertEqual(u2.course_enrollments[0].access_level, CourseAccess.student) c2 = datamodels.get_course_by_slug("abc") self.assertEqual(len(c2.students), 2)
def add_event(event_type): """ Log an event triggered by the current user to the database if it's the right type, or just some random logfile if it's not. """ user = None if "user_id" in session: user = datamodels.get_user(session["user_id"]) if event_type == "progress": segment_id = request.form["segment_id"] progress = int(request.form["percent"]) if user is not None: user_id = user.id progress = request.form["percent"] seg = datamodels.get_segment(segment_id) seg.save_user_progress(user, progress) d = { "segment_id": segment_id, "user_id": user_id, "user_status": seg.user_status(user), "progress": seg.user_progress(user), } return json.dumps(d) else: sess = session.get("anon_progress", "{}") d = json.loads(sess) if segment_id not in d or d[segment_id] < progress: d[segment_id] = progress session["anon_progress"] = json.dumps(d) seg = datamodels.get_segment(segment_id) d = { "segment_id": segment_id, "user_status": seg.user_status(user=None, progress=progress), "progress": progress, } return json.dumps(d) else: return event_type
def remove_teacher(user, course_slug=None, teacher_id=None, institute=""): course = datamodels.get_course_by_slug(course_slug) if not course or not user.teaches(course): raise abort(404, "No such course or you don't have permissions to edit it") if user.id == teacher_id: return jsonify({ "success": False, "message": "You can't remove yourself" }), 400 if not datamodels.get_user(teacher_id): return jsonify({"success": False, "message": "No such teacher"}), 400 removed = course.remove_teacher(teacher_id) return jsonify({ "success": removed, "teacher_id": teacher_id, "message": "Teacher removed" })
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()
def test_user_not_found(self): u = datamodels.get_user(1) self.assertIsNone(u)
def get_current_user(): if "user_id" in session: return datamodels.get_user(session["user_id"]) else: return None
def view(slug, institute=""): """ View a user's profile. """ user_id = slug user = datamodels.get_user(user_id) data = {"user": user, "form": EditUserForm()} return render_template("user.html", **data)