Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
crowdsourcehinter
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
crowdsourcehinter
Commits
a0c81873
Commit
a0c81873
authored
Sep 16, 2014
by
Sola
Browse files
Options
Browse Files
Download
Plain Diff
pulled remote
parents
02c5d095
deb1d23b
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
59 additions
and
25 deletions
+59
-25
crowdxblock/crowdxblock.py
+0
-0
crowdxblock/crowdxblock.py.orig
+59
-25
No files found.
crowdxblock/crowdxblock.py
View file @
a0c81873
This diff is collapsed.
Click to expand it.
crowdxblock/crowdxblock.py.orig
View file @
a0c81873
...
@@ -22,14 +22,14 @@ class CrowdXBlock(XBlock):
...
@@ -22,14 +22,14 @@ class CrowdXBlock(XBlock):
# Database of hints. hints are stored as such: {"incorrect_answer": {"hint": rating}}. each key (incorrect answer)
# Database of hints. hints are stored as such: {"incorrect_answer": {"hint": rating}}. each key (incorrect answer)
# has a corresponding dictionary (in which hints are keys and the hints' ratings are the values).
# has a corresponding dictionary (in which hints are keys and the hints' ratings are the values).
<<<<<<< HEAD
<<<<<<< HEAD
hint_database = Dict(default={'answer': {'hint': 5}}, scope=Scope.user_state_summary)
=======
# Temporary values have been added into the hint_database for testing purposes (will be removed in the future)
# Temporary values have been added into the hint_database for testing purposes (will be removed in the future)
hint_database = Dict(default={'answer': {'hint': 1}}, scope=Scope.user_state_summary)
hint_database = Dict(default={'answer': {'hint': 1}}, scope=Scope.user_state_summary)
=======
>>>>>>> deb1d23b2088dbdb6e497cfeeca7cf537eb9d5fd
hint_database = Dict(default={'answer': {'hint': 5}}, scope=Scope.user_state_summary)
>>>>>>> master
# This is a dictionary of hints that will be used to determine what hints to show a student.
# This is a dictionary of hints that will be used to determine what hints to show a student.
# flagged hints are not included in this dictionary of hints
# flagged hints are not included in this dictionary of hints
HintsToUse = Dict(
{
}, scope=Scope.user_state)
HintsToUse = Dict(}, scope=Scope.user_state)
# This is a list of incorrect answer submissions made by the student. this list is mostly used for
# This is a list of incorrect answer submissions made by the student. this list is mostly used for
# feedback, to find which incorrect answer's hint a student voted on.
# feedback, to find which incorrect answer's hint a student voted on.
WrongAnswers = List([], scope=Scope.user_state)
WrongAnswers = List([], scope=Scope.user_state)
...
@@ -83,6 +83,28 @@ class CrowdXBlock(XBlock):
...
@@ -83,6 +83,28 @@ class CrowdXBlock(XBlock):
return data.decode("utf8")
return data.decode("utf8")
@XBlock.json_handler
@XBlock.json_handler
def clear_temp(self, data, suffix=''):
""" TODO: Remove or fix.
This clears all temprorary lists/dictionaries. This may not be relevant any longer
but is intended to prevent hints from messing up when changing between units within
a section.
"""
remove_list = []
# a list is used to systematically remove all key/values from a dictionary.
# there may be a much cleaner way to do this but I could not find one very easily.
# This whole function will probably be removed if scopes are corrected later.
for used_hints in self.Used:
remove_list.append(used_hints)
for items in remove_list:
self.Used.remove(items)
remove_list = []
for wrong_answers in self.WrongAnswers:
remove_list.append(wrong_answers)
for items in remove_list:
self.WrongAnswers.remove(items)
self.HintsToUse.clear()
@XBlock.json_handler
def get_hint(self, data, suffix=''):
def get_hint(self, data, suffix=''):
"""
"""
Returns hints to students. Hints are placed into the HintsToUse dictionary if it is found that they
Returns hints to students. Hints are placed into the HintsToUse dictionary if it is found that they
...
@@ -279,35 +301,45 @@ class CrowdXBlock(XBlock):
...
@@ -279,35 +301,45 @@ class CrowdXBlock(XBlock):
of 0, it is considered to be flagged.
of 0, it is considered to be flagged.
Args:
Args:
data_
hint: This is equal to the data['used_hint
'] in self.rate_hint
data_
value: This is equal to the data['value
'] in self.rate_hint
answer_data: This is equal to the data['
student_
answer'] in self.rate_hint
answer_data: This is equal to the data['answer'] in self.rate_hint
"""
"""
for answer_keys in self.hint_database:
for answer_keys in self.hint_database:
if answer_keys == data_
hint
:
if answer_keys == data_
value
:
for hint_keys in self.hint_database[str(answer_keys)]:
for hint_keys in self.hint_database[str(answer_keys)]:
if str(hint_keys) == answer_data:
if str(hint_keys) == answer_data:
self.Flagged[str(hint_keys)] = str(answer_keys)
self.Flagged[str(hint_keys)] = str(answer_keys)
def change_rating(self, data_
hint
, data_rating, answer_data):
def change_rating(self, data_
value
, data_rating, answer_data):
"""
"""
This function is used to change the rating of a hint when it is voted on.
This function is used to change the rating of a hint when it is voted on.
Initiated by rate_hint. The temporary_dictionary is manipulated to be used
Initiated by rate_hint. The temporary_dictionary is manipulated to be used
in self.rate_hint
in self.rate_hint
Args:
Args:
data_
hint: This is equal to the data['used_hint
'] in self.rate_hint
data_
value: This is equal to the data['value
'] in self.rate_hint
data_rating: This is equal to the data['student_rating'] in self.rate_hint
data_rating: This is equal to the data['student_rating'] in self.rate_hint
answer_data: This is equal to the data['
student_
answer'] in self.rate_hint
answer_data: This is equal to the data['answer'] in self.rate_hint
Returns:
Returns:
The rating associated with the hint is returned. This rating is identical
The rating associated with the hint is returned. This rating is identical
to what would be found under self.hint_database[answer_string[hint_string]]
to what would be found under self.hint_database[answer_string[hint_string]]
"""
"""
temporary_dictionary = str(self.hint_database[str(answer_data)])
for hint_keys in self.Used:
temporary_dictionary = (ast.literal_eval(temporary_dictionary))
if str(hint_keys) == str(answer_data):
temporary_dictionary[str(data_hint)] += int(data_rating)
# use index of hint used to find the hint within self.hint_database
self.hint_database[str(answer_data)] = temporary_dictionary
answer = self.Used.index(str(answer_data))
return str(temporary_dictionary[str(data_hint)])
for answer_keys in self.hint_database:
temporary_dictionary = str(self.hint_database[str(answer_keys)])
temporary_dictionary = (ast.literal_eval(temporary_dictionary))
# if I remember correctly, changing the rating values in self.hint_database
# didn't work correctly for some reason, so instead I manipulated this
# temporary dictionary and then set self.hint_database to equal it.
# probably due to scope error (which also is affecting the studio interactions)
if str(answer_keys) == str(self.WrongAnswers[answer]):
temporary_dictionary[self.Used[int(answer)]] += int(data_rating)
self.hint_database[str(answer_keys)] = temporary_dictionary
return str(temporary_dictionary[self.Used[int(answer)]])
def remove_symbols(self, answer_data):
def remove_symbols(self, answer_data):
"""
"""
...
@@ -359,9 +391,9 @@ class CrowdXBlock(XBlock):
...
@@ -359,9 +391,9 @@ class CrowdXBlock(XBlock):
data['answer']: This is the incorrect answer for which the student is submitting a new hint.
data['answer']: This is the incorrect answer for which the student is submitting a new hint.
"""
"""
submission = data['submission'].replace('ddeecciimmaallppooiinntt', '.')
submission = data['submission'].replace('ddeecciimmaallppooiinntt', '.')
answer
= data['answer'].replace('ddeecciimmaallppooiinntt', '.')
hint_id
= data['answer'].replace('ddeecciimmaallppooiinntt', '.')
for answer_keys in self.hint_database:
for answer_keys in self.hint_database:
if str(answer_keys) == s
tr(answer)
:
if str(answer_keys) == s
elf.WrongAnswers[self.Used.index(hint_id)]
:
# find the answer for which a hint is being submitted
# find the answer for which a hint is being submitted
if str(submission) not in self.hint_database[str(answer_keys)]:
if str(submission) not in self.hint_database[str(answer_keys)]:
temporary_dictionary = str(self.hint_database[str(answer_keys)])
temporary_dictionary = str(self.hint_database[str(answer_keys)])
...
@@ -374,15 +406,17 @@ class CrowdXBlock(XBlock):
...
@@ -374,15 +406,17 @@ class CrowdXBlock(XBlock):
return
return
else:
else:
# if the hint exists already, simply upvote the previously entered hint
# if the hint exists already, simply upvote the previously entered hint
if str(submission) in self.DefaultHints:
hint_index = self.Used.index(submission)
self.DefaultHints[str(submission)] += int(1)
for default_hints in self.DefaultHints:
return
if default_hints == self.Used[int(hint_index)]:
else:
self.DefaultHints[str(default_hints)] += int(1)
temporary_dictionary = str(self.hint_database[str(answer)])
return
for answer_keys in self.hint_database:
temporary_dictionary = str(self.hint_database[str(answer_keys)])
temporary_dictionary = (ast.literal_eval(temporary_dictionary))
temporary_dictionary = (ast.literal_eval(temporary_dictionary))
temporary_dictionary[str(submission)] += int(data['rating'])
if str(answer_keys) == str(self.WrongAnswers[int(hint_index)]):
self.hint_database[str(answer)] = temporary_dictionary
temporary_dictionary[self.Used[int(hint_index)]] += int(data['rating'])
return
self.hint_database[str(answer_keys)] = temporary_dictionary
@XBlock.json_handler
@XBlock.json_handler
def studiodata(self, data, suffix=''):
def studiodata(self, data, suffix=''):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment