Optimize dictionary combinations
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -65,12 +65,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
|
||||
@@ -648,7 +641,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
|
||||
|
||||
|
||||
@@ -685,7 +680,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,
|
||||
|
||||
Reference in New Issue
Block a user