本文整理汇总了Python中compair.models.Course类的典型用法代码示例。如果您正苦于以下问题:Python Course类的具体用法?Python Course怎么用?Python Course使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Course类的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: post
def post(self):
"""
Create new course
"""
require(CREATE, Course,
title="Course Not Saved",
message="Sorry, your role in the system does not allow you to save courses.")
params = new_course_parser.parse_args()
new_course = Course(
name=params.get("name"),
year=params.get("year"),
term=params.get("term"),
sandbox=params.get("sandbox"),
start_date=params.get('start_date'),
end_date=params.get('end_date', None)
)
if new_course.start_date is not None:
new_course.start_date = datetime.datetime.strptime(
new_course.start_date,
'%Y-%m-%dT%H:%M:%S.%fZ')
if new_course.end_date is not None:
new_course.end_date = datetime.datetime.strptime(
new_course.end_date,
'%Y-%m-%dT%H:%M:%S.%fZ')
if new_course.start_date and new_course.end_date and new_course.start_date > new_course.end_date:
abort(400, title="Course Not Saved", message="Course end time must be after course start time.")
try:
# create the course
db.session.add(new_course)
# also need to enrol the user as an instructor
new_user_course = UserCourse(
course=new_course,
user_id=current_user.id,
course_role=CourseRole.instructor
)
db.session.add(new_user_course)
db.session.commit()
except exc.SQLAlchemyError as e:
db.session.rollback()
current_app.logger.error("Failed to add new course. " + str(e))
raise
on_course_create.send(
self,
event_name=on_course_create.name,
user=current_user,
course=new_course,
data=marshal(new_course, dataformat.get_course()))
return marshal(new_course, dataformat.get_course())
示例2: post
def post(self, course_uuid, user_uuid, group_name):
course = Course.get_active_by_uuid_or_404(course_uuid)
user = User.get_by_uuid_or_404(user_uuid)
user_course = UserCourse.query.filter(
and_(
UserCourse.course_id == course.id,
UserCourse.user_id == user.id,
UserCourse.course_role != CourseRole.dropped,
)
).first_or_404()
require(EDIT, user_course)
user_course.group_name = group_name
db.session.commit()
on_course_group_user_create.send(
current_app._get_current_object(),
event_name=on_course_group_user_create.name,
user=current_user,
course_id=course.id,
data={"user_id": user.id},
)
return {"group_name": group_name}
示例3: delete
def delete(self, course_uuid, assignment_uuid):
course = Course.get_active_by_uuid_or_404(course_uuid)
assignment = Assignment.get_active_by_uuid_or_404(assignment_uuid)
require(DELETE, assignment,
title="Assignment Not Deleted",
message="Sorry, your role in this course does not allow you to delete assignments.")
if current_app.config.get('DEMO_INSTALLATION', False):
from data.fixtures import DemoDataFixture
if assignment.id in DemoDataFixture.DEFAULT_ASSIGNMENT_IDS:
abort(400, title="Assignment Not Deleted", message="Sorry, you cannot remove the default demo assignments.")
formatted_assignment = marshal(assignment, dataformat.get_assignment(False))
# delete file when assignment is deleted
assignment.active = False
assignment.clear_lti_links()
db.session.commit()
# update course grades
course.calculate_grades()
on_assignment_delete.send(
self,
event_name=on_assignment_delete.name,
user=current_user,
course_id=course.id,
assignment=assignment,
data=formatted_assignment)
return {'id': assignment.uuid}
示例4: delete
def delete(self, course_uuid, assignment_uuid, answer_uuid, answer_comment_uuid):
"""
Delete an answer comment
"""
course = Course.get_active_by_uuid_or_404(course_uuid)
assignment = Assignment.get_active_by_uuid_or_404(assignment_uuid)
answer_comment = AnswerComment.get_active_by_uuid_or_404(answer_comment_uuid)
require(DELETE, answer_comment)
data = marshal(answer_comment, dataformat.get_answer_comment(False))
answer_comment.active = False
db.session.commit()
# update course & assignment grade for user if self-evaluation is completed
if not answer_comment.draft and answer_comment.comment_type == AnswerCommentType.self_evaluation:
assignment.calculate_grade(answer_comment.user)
course.calculate_grade(answer_comment.user)
on_answer_comment_delete.send(
self,
event_name=on_answer_comment_delete.name,
user=current_user,
course_id=course.id,
answer_comment=answer_comment,
data=data,
)
return {"id": answer_comment.uuid}
示例5: post
def post(self, course_uuid):
"""
link current session's lti context with a course
"""
course = Course.get_active_by_uuid_or_404(course_uuid)
require(EDIT, course)
if not sess.get("LTI"):
return {"error": "Your LTI session has expired."}, 404
if not sess.get("lti_context"):
return {"error": "Your LTI session has no context."}, 404
lti_context = LTIContext.query.get_or_404(sess.get("lti_context"))
lti_context.compair_course_id = course.id
db.session.commit()
# automatically fetch membership if enabled for context
if lti_context.ext_ims_lis_memberships_url and lti_context.ext_ims_lis_memberships_id:
update_lti_course_membership.delay(course.id)
on_lti_course_link.send(
self,
event_name=on_lti_course_link.name,
user=current_user,
data={"course_id": course.id, "lti_context_id": lti_context.id},
)
return {"success": True}
示例6: post
def post(self, course_uuid):
"""
link current session's lti context with a course
"""
course = Course.get_active_by_uuid_or_404(course_uuid)
require(EDIT, course,
title="Course Not Linked",
message="Sorry, you do not have permission to link this course since you are not enrolled as an instructor in the course.")
if not sess.get('LTI'):
abort(400, title="Course Not Linked",
message="Sorry, your LTI session has expired. Please log in via LTI and try linking again.")
if not sess.get('lti_context'):
abort(400, title="Course Not Linked",
message="Sorry, your LTI link settings have no course context. Please edit your LTI link settings and try linking again.")
lti_context = LTIContext.query.get_or_404(sess.get('lti_context'))
lti_context.compair_course_id = course.id
db.session.commit()
# automatically fetch membership if enabled for context
if lti_context.membership_enabled:
update_lti_course_membership.delay(course.id)
on_lti_course_link_create.send(
self,
event_name=on_lti_course_link_create.name,
user=current_user,
data={ 'course_id': course.id, 'lti_context_id': lti_context.id })
return { 'success': True }
示例7: delete
def delete(self, course_uuid, lti_context_uuid):
"""
unlink lti context from course
"""
course = Course.get_active_by_uuid_or_404(course_uuid)
lti_context = LTIContext.get_by_uuid_or_404(lti_context_uuid)
require(DELETE, lti_context,
title="Course Not Unlinked",
message="Sorry, your system role does not allow you to unlink LTI courses.")
if lti_context.compair_course_id != course.id:
abort(400, title="Course Not Unlinked", message="Sorry, The LTI context is already not linked to the course.")
lti_context.compair_course_id = None
db.session.commit()
# automatically refresh membership if it was enabled for the removed context
if lti_context.membership_enabled:
update_lti_course_membership.delay(course.id)
on_lti_course_unlink.send(
self,
event_name=on_lti_course_unlink.name,
user=current_user,
data={ 'course_id': course.id, 'lti_context_id': lti_context.id })
return { 'success': True }
示例8: delete
def delete(self, course_uuid, assignment_uuid, answer_uuid):
course = Course.get_active_by_uuid_or_404(course_uuid)
assignment = Assignment.get_active_by_uuid_or_404(assignment_uuid)
answer = Answer.get_active_by_uuid_or_404(answer_uuid)
require(DELETE, answer,
title="Answer Not Deleted",
message="Sorry, your role in this course does not allow you to delete this answer.")
if current_app.config.get('DEMO_INSTALLATION', False):
from data.fixtures import DemoDataFixture
if assignment.id in DemoDataFixture.DEFAULT_ASSIGNMENT_IDS and answer.user_id in DemoDataFixture.DEFAULT_STUDENT_IDS:
abort(400, title="Answer Not Deleted", message="Sorry, you cannot delete the default student demo answers.")
answer.active = False
db.session.commit()
# update course & assignment grade for user if answer was fully submitted
if not answer.draft:
if answer.user:
assignment.calculate_grade(answer.user)
course.calculate_grade(answer.user)
elif answer.group:
assignment.calculate_group_grade(answer.group)
course.calculate_group_grade(answer.group)
on_answer_delete.send(
self,
event_name=on_answer_delete.name,
user=current_user,
course_id=course.id,
answer=answer,
data={'assignment_id': assignment.id, 'answer_id': answer.id})
return {'id': answer.uuid}
示例9: get
def get(self, course_uuid):
"""
refresh the course membership if able
"""
course = Course.get_active_by_uuid_or_404(course_uuid)
require(EDIT, course)
if not course.lti_linked:
return {"error": "Course not linked to lti context"}, 400
valid_membership_contexts = [
lti_context
for lti_context in course.lti_contexts
if lti_context.ext_ims_lis_memberships_url and lti_context.ext_ims_lis_memberships_id
]
pending = 0
enabled = len(valid_membership_contexts) > 0
if enabled:
lti_context_ids = [lti_context.id for lti_context in valid_membership_contexts]
pending = (
LTIMembership.query.join(LTIUser)
.filter(and_(LTIUser.compair_user_id == None, LTIMembership.lti_context_id.in_(lti_context_ids)))
.count()
)
status = {"enabled": enabled, "pending": pending}
on_lti_course_membership_status_get.send(
self, event_name=on_lti_course_membership_status_get.name, user=current_user, data={"course_id": course.id}
)
return {"status": status}
示例10: post
def post(self, course_uuid, assignment_uuid, answer_uuid):
"""
Mark an answer as being a top answer
:param course_uuid:
:param assignment_uuid:
:param answer_uuid:
:return: marked answer
"""
course = Course.get_active_by_uuid_or_404(course_uuid)
assignment = Assignment.get_active_by_uuid_or_404(assignment_uuid)
answer = Answer.get_active_by_uuid_or_404(answer_uuid)
require(MANAGE, answer,
title="Answer Not Added",
message="Your role in this course does not allow you to add to the list of instructor-picked answers.")
params = top_answer_parser.parse_args()
answer.top_answer = params.get('top_answer')
db.session.add(answer)
on_set_top_answer.send(
self,
event_name=on_set_top_answer.name,
user=current_user,
course_id=course.id,
assignment_id=assignment.id,
data={'answer_id': answer.id, 'top_answer': answer.top_answer})
db.session.commit()
return marshal(answer, dataformat.get_answer(restrict_user=False))
示例11: post
def post(self, course_uuid):
course = Course.get_active_by_uuid_or_404(course_uuid)
user_course = UserCourse(course_id=course.id)
require(EDIT, user_course,
title="Class List Not Imported",
message="Sorry, your role in this course does not allow you to import or otherwise change the class list.")
if current_app.config.get('DEMO_INSTALLATION', False):
from data.fixtures import DemoDataFixture
if course.id == DemoDataFixture.DEFAULT_COURSE_ID:
abort(400, title="Class List Not Imported", message="Sorry, you cannot import users for the default demo course.")
params = import_classlist_parser.parse_args()
import_type = params.get('import_type')
if import_type not in [ThirdPartyType.cas.value, ThirdPartyType.saml.value, None]:
abort(400, title="Class List Not Imported", message="Please select a way for students to log in and try importing again.")
elif import_type == ThirdPartyType.cas.value and not current_app.config.get('CAS_LOGIN_ENABLED'):
abort(400, title="Class List Not Imported", message="Please select another way for students to log in and try importing again. Students are not able to use CWL logins based on the current settings.")
elif import_type == ThirdPartyType.saml.value and not current_app.config.get('SAML_LOGIN_ENABLED'):
abort(400, title="Class List Not Imported", message="Please select another way for students to log in and try importing again. Students are not able to use CWL logins based on the current settings.")
elif import_type is None and not current_app.config.get('APP_LOGIN_ENABLED'):
abort(400, title="Class List Not Imported", message="Please select another way for students to log in and try importing again. Students are not able to use the ComPAIR logins based on the current settings.")
uploaded_file = request.files['file']
results = {'success': 0, 'invalids': []}
if not uploaded_file:
abort(400, title="Class List Not Imported", message="No file was found to upload. Please try uploading again.")
elif not allowed_file(uploaded_file.filename, current_app.config['UPLOAD_ALLOWED_EXTENSIONS']):
abort(400, title="Class List Not Imported", message="Sorry, only CSV files can be imported. Please try again with a CSV file.")
unique = str(uuid.uuid4())
filename = unique + secure_filename(uploaded_file.filename)
tmp_name = os.path.join(current_app.config['UPLOAD_FOLDER'], filename)
uploaded_file.save(tmp_name)
current_app.logger.debug("Importing for course " + str(course.id) + " with " + filename)
with open(tmp_name, 'rb') as csvfile:
spamreader = csv.reader(csvfile)
users = []
for row in spamreader:
if row:
users.append(row)
if len(users) > 0:
results = import_users(import_type, course, users)
on_classlist_upload.send(
self,
event_name=on_classlist_upload.name,
user=current_user,
course_id=course.id)
os.remove(tmp_name)
current_app.logger.debug("Class Import for course " + str(course.id) + " is successful. Removed file.")
return results
示例12: post
def post(self, course_uuid, assignment_uuid, answer_uuid):
"""
Create comment for an answer
"""
course = Course.get_active_by_uuid_or_404(course_uuid)
assignment = Assignment.get_active_by_uuid_or_404(assignment_uuid)
answer = Answer.get_active_by_uuid_or_404(answer_uuid)
require(CREATE, AnswerComment(course_id=course.id))
answer_comment = AnswerComment(answer_id=answer.id)
params = new_answer_comment_parser.parse_args()
answer_comment.draft = params.get("draft")
answer_comment.content = params.get("content")
# require content not empty if not a draft
if not answer_comment.content and not answer_comment.draft:
return {"error": "The comment content is empty!"}, 400
if params.get("user_id") and current_user.system_role == SystemRole.sys_admin:
user = User.get_by_uuid_or_404(params.get("user_id"))
answer_comment.user_id = user.id
else:
answer_comment.user_id = current_user.id
comment_types = [
AnswerCommentType.public.value,
AnswerCommentType.private.value,
AnswerCommentType.evaluation.value,
AnswerCommentType.self_evaluation.value,
]
comment_type = params.get("comment_type")
if comment_type not in comment_types:
abort(400)
answer_comment.comment_type = AnswerCommentType(comment_type)
db.session.add(answer_comment)
db.session.commit()
# update course & assignment grade for user if self-evaluation is completed
if not answer_comment.draft and answer_comment.comment_type == AnswerCommentType.self_evaluation:
assignment.calculate_grade(answer_comment.user)
course.calculate_grade(answer_comment.user)
on_answer_comment_create.send(
self,
event_name=on_answer_comment_create.name,
user=current_user,
course_id=course.id,
answer_comment=answer_comment,
data=marshal(answer_comment, dataformat.get_answer_comment(False)),
)
return marshal(answer_comment, dataformat.get_answer_comment())
示例13: get
def get(self, course_uuid):
course = Course.get_active_by_uuid_or_404(course_uuid)
require(READ, course,
title="Course Unavailable",
message="Courses can be seen only by those enrolled in them. Please double-check your enrollment in this course.")
on_course_get.send(
self,
event_name=on_course_get.name,
user=current_user,
data={'id': course.id})
return marshal(course, dataformat.get_course())
示例14: get
def get(self, course_uuid, assignment_uuid):
"""
Get answers submitted to the assignment submitted by current user
:param course_uuid:
:param assignment_uuid:
:return: answers
"""
course = Course.get_active_by_uuid_or_404(course_uuid)
assignment = Assignment.get_active_by_uuid_or_404(assignment_uuid)
require(READ, Answer(user_id=current_user.id),
title="Answers Unavailable",
message="Sorry, your role in this course does not allow you to view answers for this assignment.")
restrict_user = not allow(MANAGE, assignment)
params = user_answer_list_parser.parse_args()
query = Answer.query \
.options(joinedload('comments')) \
.options(joinedload('file')) \
.options(joinedload('user')) \
.options(joinedload('group')) \
.options(joinedload('score')) \
.filter_by(
active=True,
assignment_id=assignment.id,
course_id=course.id,
draft=params.get('draft')
)
# get group and individual answers for user if applicable
group = current_user.get_course_group(course.id)
if group:
query = query.filter(or_(
Answer.user_id == current_user.id,
Answer.group_id == group.id
))
# get just individual answers for user
else:
query = query.filter(Answer.user_id == current_user.id)
answers = query.all()
on_user_answer_get.send(
self,
event_name=on_user_answer_get.name,
user=current_user,
course_id=course.id,
data={'assignment_id': assignment.id})
return {"objects": marshal(answers, dataformat.get_answer(restrict_user))}