Skip to content
Snippets Groups Projects
Unverified Commit 23c9bada authored by Eric Fischer's avatar Eric Fischer Committed by GitHub
Browse files

Merge pull request #18050 from edx/efischer/quick_fix

Optimize dictionary combination
parents 88470590 27e309f1
Branches
Tags
No related merge requests found
......@@ -39,7 +39,6 @@ from django_comment_client.utils import (
get_group_id_for_user,
get_group_names_by_id,
is_commentable_divided,
merge_dict,
strip_none
)
from django_comment_common.utils import ThreadContext, get_course_discussion_settings, set_course_discussion_settings
......@@ -129,8 +128,8 @@ def get_threads(request, course, user_info, discussion_id=None, per_page=THREADS
#is user a moderator
#did the user request a group
query_params = merge_dict(
default_query_params,
query_params = default_query_params.copy()
query_params.update(
strip_none(
extract(
request.GET,
......@@ -581,14 +580,12 @@ def followed_threads(request, course_key, user_id):
try:
profiled_user = cc.User(id=user_id, course_id=course_key)
default_query_params = {
query_params = {
'page': 1,
'per_page': THREADS_PER_PAGE, # more than threads_per_page to show more activities
'sort_key': 'date',
}
query_params = merge_dict(
default_query_params,
query_params.update(
strip_none(
extract(
request.GET,
......
......@@ -66,12 +66,6 @@ class DictionaryTestCase(TestCase):
expected = {'cats': 'meow', 'dogs': 'woof'}
self.assertEqual(utils.strip_blank(d), expected)
def test_merge_dict(self):
d1 = {'cats': 'meow', 'dogs': 'woof'}
d2 = {'lions': 'roar', 'ducks': 'quack'}
expected = {'cats': 'meow', 'dogs': 'woof', 'lions': 'roar', 'ducks': 'quack'}
self.assertEqual(utils.merge_dict(d1, d2), expected)
@attr(shard=1)
@pytest.mark.django111_expected_failure
......
......@@ -60,13 +60,6 @@ def strip_blank(dic):
# TODO should we be checking if d1 and d2 have the same keys with different values?
def merge_dict(dic1, dic2):
"""
Combines the keys from the two provided dictionaries
"""
return dict(dic1.items() + dic2.items())
def get_role_ids(course_id):
"""
Returns a dictionary having role names as keys and a list of users as values
......@@ -647,7 +640,9 @@ def get_metadata_for_threads(course_id, threads, user, user_info):
def infogetter(thread):
return get_annotated_content_infos(course_id, thread, user, user_info)
metadata = reduce(merge_dict, map(infogetter, threads), {})
metadata = {}
for thread in threads:
metadata.update(infogetter(thread))
return metadata
......@@ -684,7 +679,8 @@ def extend_content(content):
'roles': roles,
'updated': content['created_at'] != content['updated_at'],
}
return merge_dict(content, content_info)
content.update(content_info)
return content
def add_courseware_context(content_list, course, user, id_map=None):
......
......@@ -50,10 +50,14 @@ class Thread(models.Model):
# either the 'search' or 'get_all' actions below. Both already use
# with_responses=False internally in the comment service, so no additional
# optimization is required.
default_params = {'page': 1,
'per_page': 20,
'course_id': query_params['course_id']}
params = utils.merge_dict(default_params, utils.strip_blank(utils.strip_none(query_params)))
params = {
'page': 1,
'per_page': 20,
'course_id': query_params['course_id'],
}
params.update(
utils.strip_blank(utils.strip_none(query_params))
)
if query_params.get('text'):
url = cls.url(action='search')
......
......@@ -103,7 +103,7 @@ class User(models.Model):
raise utils.CommentClientRequestError("Must provide course_id when retrieving active threads for the user")
url = _url_for_user_active_threads(self.id)
params = {'course_id': text_type(self.course_id)}
params = utils.merge_dict(params, query_params)
params.update(query_params)
response = utils.perform_request(
'get',
url,
......@@ -119,7 +119,7 @@ class User(models.Model):
raise utils.CommentClientRequestError("Must provide course_id when retrieving subscribed threads for the user")
url = _url_for_user_subscribed_threads(self.id)
params = {'course_id': text_type(self.course_id)}
params = utils.merge_dict(params, query_params)
params.update(query_params)
response = utils.perform_request(
'get',
url,
......
......@@ -30,10 +30,6 @@ def extract(dic, keys):
return strip_none({k: dic.get(k) for k in keys})
def merge_dict(dic1, dic2):
return dict(dic1.items() + dic2.items())
@contextmanager
def request_timer(request_id, method, url, tags=None):
start = time()
......@@ -83,7 +79,8 @@ def perform_request(method, url, data_or_params=None, raw=False,
params = request_id_dict
else:
data = None
params = merge_dict(data_or_params, request_id_dict)
params = data_or_params.copy()
params.update(request_id_dict)
with request_timer(request_id, method, url, metric_tags):
response = requests.request(
method,
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment